延迟工作者一直关闭?

时间:2012-10-18 00:58:31

标签: ruby-on-rails ruby-on-rails-3 heroku delayed-job worker

Rails的新手和延迟工作的新手。

有一个应该在5分钟后触发。我终于开始工作了,如果我跑了

rake jobs:work

在我的终端中,作业启动并正常工作。如果我按CTRL-C并在终端中退出该操作,则延迟的作业将无法正常工作。这是我本地服务器上的一件事,另一件是Heroku,我必须使用

启动延迟作业
heroku run rake jobs:work

我查看了新的Heroku工具带并下载了他们建议工人维护的宝石,工头,但当我运行“工头开始”时,我收到此错误

ERROR: procfile does not exist

我不知道什么是procfile,我害怕在花了一天时间调试我的delayed_jobs动作后破坏了东西,我想这样做是为了确保它有效而不是找出一些hacky修复之后就会崩溃 - 所以我想我应该问这个问题,但这可能是令人讨厌的模糊。

我应该使用工头吗?还是没用? (看到另一个SO问题)。哪里是我的procfile?我应该用它做什么吗?

谢谢,

萨莎

2 个答案:

答案 0 :(得分:2)

您应该使用procfile来设置Heroku进程,这是Heroku用于定义和控制进程的标准方法。

如果你还没有使用procfile这一点,当你推送Rails应用程序时,Heroku会添加一些默认进程,包括webworker流程。默认worker进程设置为延迟作业。

开发Foreman是为了设置你的本地机器使用相同的方法,但是,与Heroku服务不同,Foreman实际上需要一个procfile来控制Foreman启动时启动的服务,因为它不会知道如何设置默认值。

我建议您在项目的根目录中创建一个procfile,以确保您的进程在本地计算机上以与Heroku相同的方式设置和运行。如果您想模仿Heroku自动设置的内容,请将以下内容添加到procfile,具体取决于您是否使用Thin Web服务器(Heroku推荐)。

在gemfile中使用Thin:

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT
worker: bundle exec rake jobs:work

没有特殊的Web服务器(例如,您使用webrick,rails默认):

web: bundle exec rails server -p $PORT
worker: bundle exec rake jobs:work

一旦这个文件到位,您就可以在本地计算机上运行foreman,它将自动启动您的Web服务器和delayed_job工作程序。

运行此过程只会影响在本地计算机上启动delayed_job。当您运行与当前使用的完全相同的命令bundle exec rake jobs:work时,不应该对本地或Heroku上的dj操作产生任何影响。显然,需要进行一些测试来实现这种情况。

Workless旨在扩展Heroku上的工作人员,以便在没有可用工作时您无需支付费用。它与procfile无关,或者定义如何实际启动dj工作进程。

答案 1 :(得分:-1)

据我所知,有2个版本的delayed_job:

  1. original(tobi's)https://github.com/tobi/delayed_job
  2. collectiveidea的分叉:https://github.com/collectiveidea/delayed_job
  3. 使用collectiveidea版本时,您应该按以下方式启动它:

    # Runs two workers in separate processes.
    $ RAILS_ENV=production script/delayed_job -n 2 start
    

    我对Heroku上的delayed_job不熟悉,请按照其说明操作。