【问题标题】:Heroku resque no workerHeroku resque 没有工人
【发布时间】:2013-04-02 16:06:36
【问题描述】:

我已成功将作业排队,我可以在 resque web 中看到。

但该作业从未执行,只是待处理。我的 heroku 应用程序上有 1 名工作人员。在 resque stats 中,工人是 0。

在 lib/tasks/resque.rb 中:

require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'

  Resque.after_fork do |job|
    ActiveRecord::Base.establish_connection
  end

end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"

【问题讨论】:

  • 正在启动这 1 个工人吗?
  • 如何启动这 1 个工作人员?我试过heroku run bundle exec rake jobs:work,但出现错误。不知道如何构建任务..
  • 您说 我的 heroku 应用程序上有 1 个工作人员。。这是什么意思?
  • @messick - 为我的 heroku 应用程序配备 1 个测功机和 1 个工作人员。

标签: ruby ruby-on-rails-3 heroku ruby-on-rails-3.2 resque


【解决方案1】:

您必须通过Procfile 告诉 Heroku 启动您的 Resque 工作程序。这是您放置要在本地运行的命令的位置,例如 RAILS_ENV=Production QUEUE=* bundle exec rake jobs:work

通过使用相同的 Profile 启动 Resque 工作人员和 Foreman,这为您在本地测试 Heroku Resque 设置提供了额外的好处。

Here 是 Heroku 网站上的一个链接,它解释了如何进行设置。

【讨论】:

  • 不幸的是,我使用的是 windows,因此只能在 Heroku 上进行测试。为什么我不能通过在控制台中运行以下命令来启动 1 个工作人员:heroku run bundle exec rake jobs:work
  • 错字..文件应该命名为 resque.RAKE...现在可以正常工作了。
  • 不,Procfile 是他们这样做的方法,不要通过 rake 任务来做到这一点。我有一种感觉,您所做的是在您的一个网络测功机上启动了 Resque 工作人员。即使看起来没问题,但它 100% 违背 Heroku 想要你做的事情,并且可以并且会在以后引起问题。
  • 如何创建这个 Procfile?应该取什么名字,去哪里?
  • 这一切都在我在回答中给你的链接中。但是,该文件是一个名为 Procfile 的文本文件,位于应用程序的根目录中。文件内部是:resque: env TERM_CHILD=1 bundle exec rake jobs:work
【解决方案2】:

正如@messick 所说,您需要使用 Procfile 执行 resque worker 注册,以防万一您真的不关心设置环境,只需在您的 Procfile 中添加这些行:

resque: env TERM_CHILD=1 COUNT=1 QUEUE=* bundle exec rake resque:work 
worker: bundle exec rake resque:work COUNT=1 QUEUE=*

如果需要调度器,只需添加此行

scheduler:  bundle exec rake resque:scheduler

【讨论】:

  • 为什么需要在procfile中同时声明resque:worker:
  • 我想举更多的例子......在我的情况下,我确实有一个工人(我在我的页面中执行的一个线程,这只是为了使用 angularjs 加载我的网站)和一个 resque进程(这将通过使用 YML 文件道具自动执行)
猜你喜欢
  • 2015-11-08
  • 2012-04-24
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 2013-08-07
相关资源
最近更新 更多