我正在尝试使用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
答案 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。这个有稳定的释放吗?
还相关: