1

我有一组在生产服务器上运行的 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)。服务器是薄荷。两者的 Rake 版本相同。gem 只有一个版本。

因为它是生产服务器,所以没有日志(除了 produciton.log,它没有帮助)。任何有关我如何调试此问题的帮助将不胜感激。

4

1 回答 1

1

这可能是因为您的服务器软件收到的请求响应时间超过 10 秒。尽管您正在启动一个 rake 任务,但它仍然必须等待该system调用执行:如果需要一段时间,则该任务将被终止并且服务器工作人员返回到工作程序池。

在更一般的意义上,这不是在后台执行任务的适当方式。您可能想要使用ResqueDelayed Job,它们将任务排入队列并在后台为您运行它们。

于 2012-08-06T16:17:58.300 回答