3

Railsアプリ内で簡単なタスクスケジューリングを設定する方法はありますか?1時間ごと、毎日、または毎週実行したいコードがあります。それらを別々のスクリプトに分割したくないので、cronジョブを介してスケジュールする必要があります。その場合、スクリプトをバックアップすることを忘れないでください。サーバーを再構築する場合は、すべてのcronジョブを追加し直す必要がありますが、必要なものが少し面倒に思えます。

Railsアプリのどこかでジョブをスケジュールし、必要なときに魔法のように実行できるようにしたいと思います。何か案は?

4

3 に答える 3

3

これには、rufus-schedulerやより人気のある「いつでも」宝石のような宝石/プラグインがあります。私は@douglassellersのソリューションが好きですが、それについて聞いたことがありませんでした。

于 2010-02-05T17:54:00.127 に答える
1

私は遅延ジョブ、「データベースでバックアップされた非同期優先度キュー」を使用して、同様のことを実行します。http://github.com/tobi/delayed_jobをご覧ください

'rake jobs:work'を開始するものが必要ですが、さまざまなcronジョブをたくさん持つよりはましです。ドキュメントの:run_at属性に注意してください。これは、「Railsアプリのどこかでジョブをスケジュールし、必要なときに魔法のように実行させる」問題を解決する可能性があるようです。

于 2010-02-06T00:24:12.880 に答える
0

Rails Cron(gem install rails_cron)のようなものを使用してこれを行うことができます。これは、スケジュールされたバックグラウンドタスクの実行専用の別のRailsプロセスをスピンオフします。余分なレールインスタンスを監視し、アプリの他の部分と一緒に停止して開始する必要があり、私の経験では、非常に転倒しやすいため、この方法はお勧めしません。

より良い解決策は、Craken(http://github.com/latimes/craken )を使用して、Railsアプリのyamlファイルを介してcrontabを管理することです。スケジュールされた各タスクはyamlファイルで定義され、デプロイ時にCrakenはシステムレベルのCronTabファイルを更新する必要があるかどうかを判断します。それはあなたのcapistranoデプロイファイルに直接プラグインし、合理的にターンキーです。これにより、OSレベルのcronで実際に実行しながら、Railsアプリでスケジュールされたタスクを管理できるという利点があります。

于 2010-02-05T17:26:25.667 に答える