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?我应该用它做什么吗?
谢谢,
萨莎
答案 0 :(得分:2)
您应该使用procfile
来设置Heroku进程,这是Heroku用于定义和控制进程的标准方法。
如果你还没有使用procfile
这一点,当你推送Rails应用程序时,Heroku会添加一些默认进程,包括web
和worker
流程。默认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:
使用collectiveidea版本时,您应该按以下方式启动它:
# Runs two workers in separate processes.
$ RAILS_ENV=production script/delayed_job -n 2 start
我对Heroku上的delayed_job不熟悉,请按照其说明操作。