请原谅我的无知,但那里是否会为Resque工作者增加每个dyno的进程数量?如果是这样,怎么样?
我目前正在使用Unicorn为web dynos添加并发性,到目前为止它一直很好用。我想将此扩展到Resque工作人员。我按照Heroku's guide设置并发。
答案 0 :(得分:4)
更新:以下解决方案有效,但不建议使用。对于heroku上的resque并发,请使用resque-pool gem。
如果您使用COUNT=*
选项,则可以。你的proc文件看起来像:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque: env TERM_CHILD=1 COUNT=2 RESQUE_TERM_TIMEOUT=6 QUEUE=* bundle exec rake resque:workers
值得注意的是,Procfile中的rake任务是resque:workers
而不是 resque:work
。
更新说明
myoku上的COUNT=*
选项和生产中的rake resque:workers
调用存在重大问题。由于resque启动多个工作程序使用线程的方式,所有SIGTERM
,SIGKILL
等处理允许工作人员停止当前作业,重新排队作业并正常关闭(包括取消注册)将永远发生。这是因为信号由未被线程捕获的主进程处理。这可能会导致幻影工作者在被杀后很久就留在工人名单中。这可能就是为什么resque代码中有a comment警告resque:worker应该只用于开发模式的原因。