質問: Railsでクライアントへリクエストに対するレスポンスを行った後に処理を行うような方法に興味があります。 同じような質問が本家にありますのでリンクを貼っておきます。Rails callback after response is sent? あまり一般的ではないかもしれませんがレスポンス完了後に後処理をしたいと考えています。 理由としてはクライアントへのレスポンスには関係ないが実行しないといけない処理でかつその処理が重い場合です。 非同期処理のgem(resque等)があることは知っていますが、redisサーバを立てないといけなかったりし、管理コストがかかってしまうのが好ましくありません。 Djangoにはレスポンスに対するコールバックが用意されているようです。request_finished Railsでも何か良い方法はないでしょうか?
回答: レスポンスの送受信に関してはWebアプリ層ではなくHTTP層の話なので・・少なくともRailsでは不可能ではないかと思います。調べるとしても、Rack周りでググった方が良いかも。(DjangoもWSGIからのシグナルに対するコールバックを提供しているだけですし) というわけで、基本的には非同期処理で実装するのが常套だと思います。 redisを立てるのが厳しいなら、delayed_jobならDBテーブルで管理できます。 他にもお手軽な方法としては、thinのようなEventMachineで動くWebサーバを使用して非同期処理させる方法があります。 ``` EM::defer do # 非同期処理 end ``` ### 参考URL * delayed_job * thin