我有一个使用 Queue_Classic gem 的 Rails 3.2 应用程序,并部署在 Heroku 上。
目前我的排队作业没有得到处理,除非我heroku run rake qc:work
在命令行中运行。
我添加了一个包含以下内容的 Procfile:
worker: bundle exec rake qc:work
heroku run rake qc:work
但除非我手动运行,否则仍然没有处理队列。
我错过了什么?
这个应用程序使用了独角兽,这会产生影响吗?
我有一个使用 Queue_Classic gem 的 Rails 3.2 应用程序,并部署在 Heroku 上。
目前我的排队作业没有得到处理,除非我heroku run rake qc:work
在命令行中运行。
我添加了一个包含以下内容的 Procfile:
worker: bundle exec rake qc:work
heroku run rake qc:work
但除非我手动运行,否则仍然没有处理队列。
我错过了什么?
这个应用程序使用了独角兽,这会产生影响吗?
通常,您的工作人员独立于您的 Web 进程运行。要运行一个工作者,您需要将您的进程形式设置为运行 1 个工作者:
$ heroku scale worker=1
*确保在您的主 Rakefile 中包含 queue_classic 和 queue_classic/tasks。*
经过一番挖掘,我想出了以下解决方案。
我不确定这是否是最好的方法,或者当我们扩展 Web 进程等时它会如何表现,但它现在正在工作。
我像往常一样设置独角兽,包括
#Procfile
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
然后我添加了以下配置
#unicorn.rb
worker_processes 3
timeout 30
@qc_pid = nil
before_fork do |server, worker|
@qc_pid ||= spawn( "bundle exec rake qc:work" )
end