9

私はこれに不慣れで、Delayed Jobがどのように機能するかについて少し混乱していますか?

私はそれがテーブルを作成し、ジョブをテーブルに置くことを知っています、そして私は実行する必要があります

rake jobs:work

バックグラウンドプロセスを開始します。今私の質問は

  1. DJスクリプトは毎分テーブルをチェックし、時刻がjob_at時刻と一致すると、そのジョブを実行しますか?

  2. スクリプトが毎分テーブルをチェックしているだけの場合、cron(gemの場合)とどのように異なりますか?

ありがとう

4

2 に答える 2

10
  1. DJ スクリプトは毎分テーブルをチェックし、時刻が job_at 時刻と一致すると、そのジョブを実行しますか?

rake jobs:workDelayedJobを実行すると、テーブルがポーリングされ、設定されている場合は列の値にdelayed_jobs一致するジョブが実行されます。job_atあなたが正しいこの部分。

  1. スクリプトが毎分テーブルをチェックしているだけの場合、cron (いつでも宝石) とどう違うのですか?

whenevercrontab の設定を支援する 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 をデーモンとして設定するのが正しい方法です。

于 2013-02-22T13:09:42.183 に答える
10

DJ スクリプトは毎分テーブルをチェックし、時刻が job_at 時刻と一致すると、そのジョブを実行しますか?

はい。5 秒ごとにデータベースをチェックします。

スクリプトが毎分テーブルをチェックしているだけの場合、cron (いつでも宝石) とどう違うのですか?

バックグラウンド ジョブのコンテキストでは、それほど違いはありません。主な違いは、通常のジョブの実行方法です。

          DJ                  |            Crontab
 uses additional database     | you should either set up a rake task
 table but that's it. easier  | or a runner which can be called on the
 to code compared to crontab  | crontab
------------------------------|------------------------------------------
 requires you to run a worker | requires you to setup your cron which
 that will poll the database  | you can easily do using the whenever gem
------------------------------|------------------------------------------
 since this uses a table, it  | you have to setup some sort of logging so
 is easier to debug errors    | that you have an idea what caused the error
 when they happen             |
------------------------------|------------------------------------------
 the worker should always be  | as long as your crontab is set up properly,
 running to perform the job   | you should have no issues
------------------------------|------------------------------------------
 harder to setup recurring    | easy to setup recurring tasks
 tasks                        |
------------------------------|------------------------------------------
于 2013-02-22T13:22:34.493 に答える