Heroku - как начать работу работника (отложенная работа)? - PullRequest
5 голосов
/ 02 апреля 2012

У меня есть мини-приложение, которое использует delayed_job.На моем локальном хосте все работает нормально, но когда я развертываю свое приложение в Heroku и нажимаю на ссылку, которая должна быть выполнена delayed_job, чтобы ничего не произошло, «задача» просто сохраняется в таблице delayed_job.

В этой статье на блоге heroku написано, что задача из таблицы delayed_job выполняется, когда запускается эта команда rake jobs: work .

Но как мне запустить эту команду?Где должна быть размещена команда?В коде или из терминальной консоли?

Ответы [ 3 ]

12 голосов
/ 02 апреля 2012

Если вы работаете со стеком Cedar, запустите на терминальной консоли следующее:

heroku run rake jobs:work

Если вы используете старые стеки (бамбук, осина и т. Д.):

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 
9 голосов
/ 03 апреля 2012

Вы должны использовать Procfile, чтобы указать команды для ваших динамометров. Например, у вас должно быть что-то подобное в вашем Procfile:

AppDir / PROCFILE

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

Чтобы использовать это на своей машине разработки, вы должны использовать Foreman, все это объяснено в документации.

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

1 голос
/ 18 декабря 2015

В нашем случае мы запускаем отложенное задание только один раз в месяц, поэтому не хотим, чтобы рабочий динамо работал постоянно.

Чтобы решить эту проблему, мы ставим задачу в очередь (с .delayed), а затем используйте API платформы Heroku для вызова rake jobs:workoff в одноразовом работнике.Вызов API возвращается относительно быстро.

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