延迟工作人员不断关闭



Rails的新功能,非常延迟工作。

有一个应该在5分钟后触发的。我终于让它上班了,以便我跑步

rake jobs:work

在我的终端中,工作启动并正常工作。如果我在终端中ctrl-c并退出该动作,那么延迟的作业将停止正常工作。这是我本地服务器上的一件事,另一件事是Heroku上的一件事,我必须使用

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

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

ERROR: procfile does not exist

我不知道什么是procfile,我害怕在一天中花了几乎一天的时间来调试我的延迟_jobs的动作,我想这样做,以确保它有效,而不是弄清楚一些hacky fix fix稍后会分解 - 所以我认为我应该问这个问题,无论它可能令人讨厌。

我应该使用工头吗?还是毫无工作?(在另一个问题中看到了)。我的procfile在哪里?我应该做什么吗?

谢谢,

萨沙

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

如果您还没有将procfile使用到这一点上,那么当您推动Rails应用程序(包括webworker流程)时,Heroku添加了一些默认过程,一切都可能仍然有效。默认的worker进程设置为延迟作业。

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

我建议创建一个放置在项目根目录中的procfile,以确保您的流程以与Heroku上的本地计算机相同的方式设置和操作。如果您想模仿Heroku自动设置的设置,则根据您是否正在使用薄Web服务器(Heroku建议)将以下内容添加到procfile中。

在您的gemfile中瘦弱:

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

没有特殊的Web服务器(例如,您正在使用Webrick,the Rails默认值):

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

此文件到位后,您可以在本地计算机上运行工头,它将启动您的Web服务器并自动delayed_job工人。

在此过程中运行只会影响启动delayed_job在本地计算机上。当您运行与当前使用的完全相同的命令bundle exec rake jobs:work时,在本地或Heroku中对您的DJ操作没有影响。显然,需要进行一些测试才能使起诉实际上是这样。

毫无工作的旨在使工人在Heroku上扩展,因此您在没有可用的工作时不必为他们付款。它与procfile无关或定义如何实际启动DJ工作过程。

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

  1. 原始(tobi's)https://github.com/tobi/delayed_job
  2. CollectiveIdea的叉子:https://github.com/collatectiveidea/delayed_job

使用ColletiveIdea版本时,您应该按以下方式启动它:

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

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