3

約20〜30秒かかるタスクがあります。ビューがレンダリングされた直後にこのタスクを実行したい。このタスクの出力をセッション変数に保存したいと考えています。Rails 3を実行する最も簡単な方法は何ですか.

私が正確に必要なものを説明するために。ユーザーにつぶやきのリストを表示しています (これはレンダリングされたビューです)。このビューがレンダリングされた後に、同じツイートを取得してクラスター化するメソッドを呼び出す必要があります (20 ~ 30 秒のプロセス)。次のページに表示できるように、セッションでクラスタリングの結果を取得する必要があります。

どうすればいいですか?

4

2 に答える 2

1

これが私が問題を解決した方法です

  1. resqueバックグラウンドタスクに使用しました。render が呼び出される直前にタスクをキューに入れました。
  2. クラスタリングの結果を Redis キャッシュに格納するようにバックグラウンド ワーカーをコーディングしました。
  3. クラスターが表示されるはずのコントローラーで、redis から結果を読み取り、デシリアライズしてレンダリングしました。

完璧ではありませんでしたが、研究フィードバック収集ツールとしては十分な速さでした。

于 2012-10-25T23:58:05.800 に答える
1

ビューをレンダリングするコントローラーメソッドでそれを行うことができるはずです。「render」呼び出しの後にコードを追加するだけです。例えば:

  def index
    @tweets = Tweet.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @tweets }
    end
    # do something with tweets
    puts "#{@tweets}"
  end
于 2012-04-23T06:40:49.433 に答える