- DJ スクリプトは毎分テーブルをチェックし、時刻が job_at 時刻と一致すると、そのジョブを実行しますか?
rake jobs:work
DelayedJobを実行すると、テーブルがポーリングされ、設定されている場合は列の値にdelayed_jobs
一致するジョブが実行されます。job_at
あなたが正しいこの部分。
- スクリプトが毎分テーブルをチェックしているだけの場合、cron (いつでも宝石) とどう違うのですか?
whenever
crontab の設定を支援する gem です。サーバーで定期的にタスクを実行することとは直接関係ありません。
キューに存在するタスクを毎分実行するように cron を設定することもできdelayed_job
ますが、デーモンを実行したままにしておくと、複数の利点があります。
- cron が毎分実行されたとしても、
delayed_job
のデーモンは、cron 実行間のその 1 分間のウィンドウ内でキューに入れられたすべてのジョブを確認して実行します。
- cron が実行されるたびに、ジョブを実行する新しい Rails 環境が再構築されます。これは、新しくキューに入れられたジョブを実行する準備が整った状態でデーモンがすぐに待機できる場合、時間とリソースの無駄です。
delayed_job
毎分cronで設定したい場合は、crontabに次のようなものを追加できます
* * * * * RAILS_ENV=production script/delayed_job start --exit-on-complete
毎分、delayed_job はスピンアップし、準備ができているジョブ、または以前に失敗した実行から再試行する必要があるジョブを実行し、終了します。ただし、これはお勧めしません。delayed_job をデーモンとして設定するのが正しい方法です。