Rails / resque麻烦启动工头

时间:2014-04-18 18:24:44

标签: ruby-on-rails ruby ruby-on-rails-4 resque foreman

我正在尝试使用Foreman为我的Rails应用程序运行一些简单的后台任务,但在通过领班启动我的工作人员时遇到了麻烦。

我在使用以下命令运行redis-server和rails服务器时从终端启动它时,我的工作正常运行:

bundle exec rake resque:work QUEUE=myqueue

然而,我无法让它与Foreman一起开始。这是我在Procfile中的内容......

web: bundle exec rails server -p $PORT
worker: bundle exec rake resque:work QUEUE=myqueue

在终端

中运行'foreman start'时,我得到以下信息
14:14:39 web.1    | started with pid 48120
14:14:39 worker.1 | started with pid 48121
14:14:43 worker.1 | [deprecated] I18n.enforce_available_locales will default to true in  the future. If you really want to skip validation of your locale you can set    I18n.enforce_available_locales = false to avoid this message.
14:14:43 web.1    | => Booting WEBrick
14:14:43 web.1    | => Rails 4.0.3 application starting in development on http://0.0.0.0:5000
14:14:43 web.1    | => Run `rails server -h` for more startup options
14:14:43 web.1    | => Ctrl-C to shutdown server
14:14:43 worker.1 | D, [2014-04-18T14:14:43.561321 #48121] DEBUG -- : resque-2.0.0.pre.1:  Starting
14:14:43 worker.1 | exited with code 0
14:14:43 system   | sending SIGTERM to all processes
14:14:43 web.1    | Exiting
14:14:43          | D, [2014-04-18T14:14:43.568351 #48138] DEBUG -- : Registered signals
14:14:43          | I, [2014-04-18T14:14:43.574222 #48138]  INFO -- : Running before_first_fork hooks with [#<Worker Jacks-MacBook-Pro.local:48138:pledges>]
14:14:43 web.1    | terminated by SIGTERM

当我从Procfile中删除'worker:'行时,我可以启动工头,所以我认为它必须是该行的问题。

我正在使用Rails 4.0.3和Resque 2.0.0

1 个答案:

答案 0 :(得分:0)

你的工作人员是否作为守护进程运行?当你运行bundle exec rake resque:work QUEUE=myqueue它是否在后台运行并返回到你的shell提示符? Foreman根本不玩守护进程,resque worker可以配置为BACKGROUND = true运行。

如果工作人员 在后台运行,请停用此行为并让工头管理此过程。

如果foreman失去与它产生的进程的连接,它将终止它从procfile启动的所有其他进程,因为它认为它失败了。

这条线也令人不安:

14:14:43 worker.1 | D, [2014-04-18T14:14:43.561321 #48121] DEBUG -- : resque-2.0.0.pre.1:  Starting

看起来你正在使用Resque 2.0。这个有稳定的释放吗?

还相关:

How to setup Rails 4, Resque 2 to run with Foreman?