2012-03-21 8 views
4

レールで私はcronジョブを構築しましたが、ビューがレンダリングされると、処理されたタスクで 'サインオフ'のように実行したいコードがあります。それは、処理の絶対最後に実行されるようにビューがレンダリングされたらコードを評価してください

はどこ

はどのようにレールのプロセスのHTMLは、それがバッファんん(ビューがレンダリングされた後)のコードを置くのでしょうか? (そのレンダリングとして、あるいはそのレンダリングされたかつてのユーザーにフラッシュHTMLのでしょうか?)

+0

はい、スタックの一番下にミドルウェアを挿入するとレンダリングされた結果を取得します。応答には 'html'が含まれています。 – Reactormonk

+0

コントローラにどのように実装すればよいですか? 'format.html'の後に(もしそこにあれば、常に全てのコントローラに存在するとは限りません) – Akshat

+0

このアクションはレンダリングを防ぐ必要がありますか、それとも管理しますか?ビューを表示しないようにするためにこのコードが必要ない場合は、コントローラーで 'after_filter'を使うことができます。 –

答えて

0

レンダリングされたHTMLから要素を選択するには、あなたはjavascriptを/ jQueryのを使用して値を読むことができる:

$(document).ready(function() { 
     var completion = $('#items_processed').val(); 
    }); 
+0

私はcronタスクとして実行しているので、そのwgetは、それがjavascriptを処理するかどうかはわかりません。 – Akshat

1

あなたがレンダリングすることができます文字列を視野に、レンダリング中に、アクションの結果を記録し、文字列を返す起こる可能性のタイムアウトキャッチ:あなたがあなたの目標を達成するために行うことができますいくつかの他のものは、可能性が

begin 
    @elements = Element.find(:all) 
    html = render_to_string 
    # Store the result 
    Result.create(:element_count => @elements.count) 
rescue Timeout::Error 
    # Store the result of the call as failed? 
    Result.create(:element_count => 0) 
end 
send_data html, :disposition => 'inline', :type => 'text/html' 

を:

  1. 実行する必要のあるコードがcronジョブによってのみトリガされる場合は、コントローラアクションの代わりにレーキタスクを使用できます。

  2. cronジョブでwgetを使用してリクエストを直接行うのではなく、コントローラにリクエストしてリクエストの出力を調べ、結果をログに記録するスクリプトを呼び出すことができますコントローラ内のアクション)。

関連する問題