2012-03-21 50 views
4

在rails中,我构建了一种cronjob,但是一旦呈现视图,我想在处理的任务上运行一些代码,如'signoff'。在轨中呈现视图后评估代码

我会在哪里把代码,以便它在处理已完全结束运行(一旦视图渲染)

如何轨处理HTML它缓冲? (难道冲洗HTML给用户作为其渲染或一旦其呈现?)

+0

是的,如果您在堆栈底部注入中间件,您将抓取渲染结果。该响应包含'html'。 – Reactormonk 2012-03-21 12:00:30

+0

我将如何在控制器中实现它? 'format.html'之后(如果它存在 - 它并不总是出现在所有控制器中) – Akshat 2012-03-21 12:09:56

+0

此操作是否需要能够防止呈现,还是管理?如果您不需要此代码来阻止渲染视图,则可以在控制器上使用'after_filter' ... – 2012-03-21 12:15:01

回答

0

要挑选从呈现的HTML元素,你可以使用JavaScript读取值/ JQuery的:

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

我运行它作为一个cron任务,所以它的wget调用即时通讯不太确定它会处理JavaScript。 – Akshat 2012-03-23 10:01:14

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作业触发,则可以使用rake任务而不是控制器操作。

  2. 您可以调用脚本来向您的控制器发出请求,检查请求的输出,然后记录结果(也许通过调用新的函数),而不是直接在您的cron作业中使用wget发出请求。控制器中的动作)。