アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

アクトインディ技術部隊報告書を Elephant から Rucksack に移行

こんにちは、tahara です。

前々回のRails3 への移行に続いて移行ネタです。

本ブログ「アクトインディ技術部隊報告書」は Common Lisp (SBCL) + Hunchentoot + Elephant で動いていました。 しかし、1年2ヶ月ぶりのエントリを書こうとした時、新規エントリの登録ができなくなっていました。 Elephant をアップグレードしたのが原因だったのですが、 新しいバージョンにマイグレーションするのがめんどうだったので、 Rucksack に移行してしまいました。

Rucksack は同時に一トランザクションしか時行できなかったのですが、 そのへんは適当に改造して同時に複数トランザクション実行できるようにしました。 そのソースはこちら https://github.com/quek/rucksack です。

Hunchentoot と Rucksack の連携は次のように行います。 Hunchentoot のリダイレクによる throw と Rucksack のトランザクション制御を 両立するためにすこしめんどうなことになってまいます。

(defmethod hunchentoot::acceptor-dispatch-request ((self my-acceptor) request)
  (let (response
        (handler-done t))
    (rucksack:with-transaction ()
      ;; hunchentoot のリダイレクトのハンドリング
      (catch 'hunchentoot::handler-done
        (setf response (call-next-method))
        (setf handler-done nil)))
    (if handler-done
        (throw 'hunchentoot::handler-done nil)
        response)))

というわけで「アクトインディ技術部隊報告書」復活しましたので、 今後ともよろしくお願いいたします。