4

アプリケーションでイベントが発生してから 5 分後に実行するジョブを設定しよ うとしています。5 分経過したら、データベースを更新する必要があります。rake jobs:work と RAILS_ENV=development script/delayed_job start を試しました。このすべての前に、bundle install を実行し、rails によってdelayed_job:active_record が生成され、rake db:migrate が実行されました。5 分ごとに当選者をチェックし、当選者のトークンを更新する必要がある宝くじの Web サイトがあります。

5 分間待ちますが、ローカル アプリケーションで更新が行われません。

これが私がこれまでに持っているものです:

宝石ファイル:

 gem 'delayed_job_active_record'

 gem "daemons"

ジョブ (lib にあります)

class WinnersJob < Struct.new(:blast_id)
def perform
      ...
    end

コントローラ

 require 'winners'
 Delayed::Job.enqueue(WinnersJob.new(blast.id), 1, 5.minutes.from_now)
 end
4

1 に答える 1

12

foreman を使用してローカルでバックグラウンド ワーカーを起動する必要があると思います。以下は私のMacで機能しました。

Heroku ドキュメントから:

次に、ジョブ キューに入れられたジョブを処理するようにアプリケーションに指示する必要がありますProcfile

worker:  bundle exec rake jobs:work

Foreman を使用してアプリケーションを起動すると、ジョブ キューの処理が開始されます。

foreman start

とはいえ、Mac にデプロイする場合を除き、ローカルで実行するかどうかは問題ではありません。(これは、動作させた後に気づきました。)それがサーバー上で動作するかどうかだけが重要です。Heroku にデプロイする場合は、Delayed Job が適切に機能します。

参照:

https://devcenter.heroku.com/articles/delayed-job
https://devcenter.heroku.com/articles/procfile

于 2012-11-17T14:27:27.580 に答える