7

簡単な作業です。クライアントに html をレンダリングした後、リクエストからの情報を使用して db 呼び出しを実行したいと考えています。

私は軽量のマイクロフレームワークであるためsinatraを使用していますが、実際にはRubyのほうが高速/簡単(Rack?)である場合は何でも気に入っています。URLを取得し、そのURLに基​​づいてクライアントを別の場所にリダイレクトしたいだけです。

では、実際の after_filter で Rack/sinatra を使用するにはどうすればよいでしょうか。そして after_filter とは、応答がクライアントに送信された後を意味します。それとも、スレッドなしでは実行できないのでしょうか?

私はsinatraをフォークしてafterフィルターを追加しましたが、応答をフラッシュする方法はありません.send_dataファイルをストリーミングすると想定されていますが(これは明らかにバイナリ用です)、after_filtersを待ちます。

この質問を見たことがあります: Multipart-response-in-rubyですが、答えはレール用です。そして、それが本当にクライアントへの応答をフラッシュし、その後の処理を可能にするかどうかはわかりません。

Rack :: Callbacks には前後のコールバックがありますが、それらでさえ、応答がクライアントに送信される前に実行されるように見えます:

def call(env)
  @before.each {|c| c.call(env) }
  response = @app.call(env)
  @after.each {|c| c.call(env) }
  response 
  #i am guessing when this method returns then the response is sent to the client.
end

したがって、rake を使用してシェルを介してバックグラウンド タスクを呼び出すことができることを知っています。しかし、そうでないのはいいことです... また、NeverBlockがありますが、応答を遅らせることなく別のプロセスを実行するのに適していますか、それともアプリ全体を待機させますか(私はそうすると思います)?

これがたくさんあることは知っていますが、要するに、応答が ruby​​/sinatra/rack で送信された後に実際に実行される単純な after_filter です。

私の質問を読んだり、答えてくれてありがとう!:-)

4

1 に答える 1

5

run_laterポートをrailsに変更して、ファイルがここにあるトリックを実行します。

http://github.com/pmamediagroup/sinatra_run_later/tree/master

于 2009-02-05T23:33:44.280 に答える