Railsアプリ内の単純なタスクスケジューリング
-
18-09-2019 - |
質問
とにかく、Railsアプリ内で簡単なタスクスケジューリングをセットアップすることはありますか?毎時間、または毎日または毎週実行したいコードがあります。私はそれらを別々のスクリプトに分割したくありません。もしそうした場合、スクリプトをバックアップすることを覚えておく必要があります。サーバーを再構築する場合、すべてのCronジョブを追加して追加する必要があります。
Railsアプリのどこかでジョブをスケジュールして、望みたいときに魔法のように走らせることができたらいいのにと思います!何か案は?
解決
Rufus-Schedulerや、より人気のある「いつでも」宝石など、これには宝石/プラグインがあります。私は@douglassellersのソリューションが好きです、私はそれについて聞いていませんでした。
他のヒント
「データベースが非同期優先キュー」であるDelayed Jobを使用して、同様のことを達成します。見て http://github.com/tobi/delayed_job
「Rake Jobs:Work」をキックオフするものが必要ですが、多くの異なるCronジョブを持っているよりも優れています。ドキュメントに注目:run_at属性 - 「私のRailsアプリのどこかでジョブをスケジュールし、問題を希望するときに魔法のように実行する」ことを解決する可能性があるように見えます。
Rails Cron(GEM Install Rails_Cron)のようなものを使用してこれを行うことができます。追加のRailsインスタンスを監視して停止し、アプリの残りの部分と一緒に開始する必要があり、私の経験では非常に倒れやすいため、このようにすることをお勧めします。
より良い解決策は、クレイクを使用することです。 http://github.com/latimes/craken, 、RailsアプリのYAMLファイルを介してCrontabsを管理します。スケジュールされた各タスクはYAMLファイルで定義され、展開時にCrakenがシステムレベルのCrontabファイルを更新する必要があるかどうかを決定します。 Capistrano Deployファイルに直接差し込み、かなりターンキーです。これにより、Railsアプリでスケジュールされたタスクを実際に実行しながら、OSレベルのCronで実際に実行するという利点が得られます。