22681


Railsでクライアントへリクエストに対するレスポンスを行った後に処理を行うような方法に興味があります。  
同じような質問が本家にありますのでリンクを貼っておきます。[Rails callback after response is
sent?](https://stackoverflow.com/questions/25298459/rails-callback-after-
response-is-sent)

あまり一般的ではないかもしれませんがレスポンス完了後に後処理をしたいと考えています。  
理由としてはクライアントへのレスポンスには関係ないが実行しないといけない処理でかつその処理が重い場合です。  
非同期処理のgem(resque等)があることは知っていますが、redisサーバを立てないといけなかったりし、管理コストがかかってしまうのが好ましくありません。

Djangoにはレスポンスに対するコールバックが用意されているようです。[request_finished](https://docs.djangoproject.com/en/dev/ref/signals/#django.core.signals.request_finished)

Railsでも何か良い方法はないでしょうか？


CC BY-SA 3.0
2016-02-29T14:02:43.693
22669
2016-03-01T03:25:19.387
2017-05-23T12:38:56.467
-1
12232
question
ruby-on-rails
Rails レスポンス送信後に後処理を実施する方法


レスポンスの送受信に関してはWebアプリ層ではなくHTTP層の話なので・・少なくともRailsでは不可能ではないかと思います。調べるとしても、Rack周りでググった方が良いかも。（DjangoもWSGIからのシグナルに対するコールバックを提供しているだけですし）

というわけで、基本的には非同期処理で実装するのが常套だと思います。  
redisを立てるのが厳しいなら、delayed_jobならDBテーブルで管理できます。

他にもお手軽な方法としては、thinのようなEventMachineで動くWebサーバを使用して非同期処理させる方法があります。

[code]

    EM::defer do
      # 非同期処理
    end
    
[/code]

### 参考URL

  * [delayed_job](https://github.com/collectiveidea/delayed_job)
  * [thin](https://github.com/macournoyer/thin)


CC BY-SA 3.0
2016-03-01T03:25:19.387
22681
2016-03-01T03:25:19.387
9608
22669
answer