1

ページがユーザーにレンダリングされた後、遅いコードを実行する方法を探しています。具体的には、次のようなことができるようになりたいです。

get '/fast-action' do
  compute_after_render { put some slow code here }
  'request successful'
end

計算に関する情報をデータベースに挿入することを考えました。そして、1分に1回計算するものがあるかどうかをチェックするrufusスケジューラーのようなものを実行します。
しかし、データベースが挿入を完了するまでユーザーを待たせたくありません。

ページがユーザーにレンダリングされた後に Sinatra にコードを実行させる方法はありますか?

4

3 に答える 3

2

はい、すばやく簡単な方法の 1 つは、新しいスレッドを開始することです。

get '/fast-action' do
  body 'request successful'
  Thread.new{ slow code }
end
于 2014-11-08T14:43:06.587 に答える
1

ストリーミング レスポンスを使用できます。

get '/fast-action' do
  stream do |out|
    out << 'request successful'
    put some slow code here
    out << " "
  end
end

ただし、サーバー スレッドはそのリクエストの間 (そしてもちろん遅いコードの実行中も)ブロックされることに注意してください。

于 2014-11-08T14:42:10.433 に答える
1

副業を検討することをお勧めします。これにはSidekiq gemを使用するのが好きです。Redis を使用して、実行する必要があるジョブを保存し、時々チェックします。それは完全に構成可能であり、そのすべてです。メールの送信、画像などの処理、長いプロセスの実行など、後で実行できるジョブを実行している場合は、これを強くお勧めします。

于 2014-11-12T04:49:17.173 に答える