我有一组在生产服务器上运行的rake任务,它与主线程分离,并在后台发生
这是执行它的代码
def vehicle
@estate = Estate.find(@estate_id)
@date_string = @login_month.strftime("%m%Y")
system("rake udpms:process_only_vehicle[#{@date_string},#{@estate_id}] &")
redirect_to :controller => "reports/error_messages", :message => "Processing will happen in the background and reports will be refreshed after two minutes", :target => "_blank"
end
当通过url路由执行此代码时,它运行rake任务,我可以查看是否检查生产计算机上的活动进程,但是它在大约10秒后突然结束。
ps axl | grep rake
这是它显示的
ruby /usr/local/rvm/gems/ruby-1.8.7-p352/bin/rake udpms:process_only_vehicle[082012,5]
如果我在终端的app文件夹中执行相同的rake任务,则运行时不会出现任何错误。这在开发机器上没有任何问题。 (OSX)。服务器是Mint。耙式版本在两者上都是一样的。宝石只有一个版本。
因为它的生产服务器没有日志(除了produciton.log,它没有帮助)。任何有关我如何调试此问题的帮助将不胜感激。
答案 0 :(得分:1)
这可能是因为您的服务器软件需要花费超过10秒钟才能响应的请求。尽管您正在开始执行rake任务,但它仍然需要等待执行system
调用:如果需要一段时间,则任务将终止,服务器工作程序将返回到工作池。
从更一般的意义上讲,这不是在后台完成任务的合适方式。您可能希望使用Resque或Delayed Job,这会将任务排入队列并在后台运行。