Heroku-如何启动工作人员(延迟工作)



我有一些使用delayed_job的小型应用程序。在我的localhost上,一切都很好,但当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,就不会发生任何事情,"任务"只是保存到表delayed_job中。

在heroku博客上写的这篇文章中,delayed_job表中的任务被执行,当运行这个命令时rake jobs:work

但是我该如何运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台?

如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:

heroku run rake jobs:work

如果您正在运行较旧的堆栈(Bamboo、Aspen等):

heroku rake jobs:work

请参阅:https://devcenter.heroku.com/articles/rake

根据delayed_job文档,您还可以通过编程启动一个工作者:

#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/environment'
Delayed::Worker.new.start 

您应该使用Procfile为dynos指定命令。例如,您的Procfile中会有这样的内容:

appDir/Procfile

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

要在你的开发机器上使用它,你应该使用Foreman,这在文档中都有解释。

https://devcenter.heroku.com/articles/procfile

在我们的案例中,我们每月只运行一次延迟的作业,所以不想让工人dyno不断运行。

为了解决这个问题,我们将作业(使用.delayed)排队,然后使用Heroku平台API在一次性工作者中生成rake jobs:workoff。API调用的返回速度相对较快。

PlatformAPI.connect_oauth(ENV["YOUR_HEROKU_KEY"]).dyno.create(ENV["YOUR_HEROKU_APP_NAME"],{command: 'rake jobs:workoff'})

最新更新