13

Rails アプリケーションでバックグラウンド ジョブを実行するために、delayed_job とdelayed_job_active_record を使用しています。キューベースのdelayed_jobを使用しています。遅延を開始するには、次のコマンドを使用しています。

RAILS_ENV=staging script/delayed_job -i=1 --queue=queue_name start

問題は、クエリが無限に起動していることです。

SQL (0.4ms)  UPDATE `delayed_jobs` SET `locked_at` = '2013-04-16 09:27:23', `locked_by` = 'delayed_job.=2 host:ip-10-204-210-77 pid:2168' WHERE `delayed_jobs`.`queue` IN ('queue_name') AND ((run_at <= '2013-04-16 09:27:23' AND (locked_at IS NULL OR locked_at < '2013-04-16 05:27:23') OR locked_by = 'delayed_job.=2 host:ip-10-204-210-77 pid:2168') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1

また、delayed_job カウントはゼロです。このため、アプリケーションは非常に遅く、多くの場所でページが読み込まれません。

4

4 に答える 4

4

delayed_job あなたが意味したのは、ポーリングが頻繁すぎるということだと思います(ちなみに5、デフォルトでは毎秒です)-ログがいっぱいになり、「無限」のようです.. :)

それがあなたの意図したものである場合は、workless gemを実行することをお勧めします。delayed_job必要に応じてのみ開始されます。Herokuワーカーの dyno がアイドル状態にならないようにするために多くの人が使用していますが、developmentモードでも同様に機能します。

delay_job_active_recordを使用している場合は、( daemons ) にも追加gem 'daemons'する必要があることに注意してください。の「実行中のジョブ」セクションを参照してください。Gemfiledelayed_job

したがって、次のものGemfileが含まれます。

gem 'delayed_job_active_record'
gem 'daemons'
gem 'workless'

さらにガイダンスが必要な場合は、以下のコメントでお知らせください。

于 2013-05-30T18:08:30.787 に答える