10

delayed_job はhttp://github.com/collectiveidea/delayed_jobにあります

delayed_job は cron タスクを実行できますか? 毎晩午前 1 時にスクリプトを実行するなど。または、スクリプトを 1 時間ごとに実行します。

そうでない場合、それを行うことができる適切な宝石は何ですか? また、ブラウザを使用してリモートで監視し、成功とエラーをログに記録できますか?

4

6 に答える 6

21

私はDelayedJobを使用して将来のアイテムをスケジュールしようとするプロジェクトに取り組みました。吸いました。

代わりに、いつでも宝石を使用することをお勧めします。

http://github.com/javan/whenever

cronジョブを定義するための明確な構文を提供するRubygemであるときはいつでも。有効なcron構文を出力し、crontabファイルを書き込むこともできます。Railsアプリケーションでうまく機能するように設計されており、Capistranoでデプロイできます。独立して正常に動作するときはいつでも。

コードは次のようになります(githubから)

  every 3.hours do
    runner "MyModel.some_process"
    rake "my:rake:task"
    command "/usr/bin/my_great_command"
  end

  every 1.day, :at => '4:30 am' do
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
  end

  every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
    runner "SomeModel.ladeeda"
  end

  every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
    runner "Task.do_something_great"
  end

これは、その使用方法に関するRailsCastビデオです

そして対応するASCIICast

于 2010-09-03T01:18:24.847 に答える
4

これには、delayed_job よりも cron の方が適していると思います。以前にプロジェクトで使用したことがありますが、バックグラウンドまたは特定の時間にタスクを実行するのに非常に優れています。しかし、定期的に発生する繰り返しのタスクには、cron が最適なツールだと思います。

いつでも(およびそのRailscastを)チェックアウトして、rake タスク (または thor、またはシェル スクリプト、またはその他のもの) を実行できる cron ジョブを簡単にスケジュールします。rake タスクを使用してモデルを更新し、ある種のダッシュボード コントローラーを使用できます。さまざまなステータスを表示します。

于 2010-09-03T00:36:00.120 に答える
3

また、ClockWork gem を使用することもできます: https://github.com/adamwiggins/clockwork-rails-dj

Clockwork は別のデーモンとして実行され、ジョブ キューイング システムに追加されるか、すぐに実行されるあらゆる種類のジョブをトリガーするために使用できます。

Delayed_Job は、複数のノードに分散できる (または分散できない) ジョブ キューイング システムに適しています。適切なタイミングでジョブをキューに追加するには、別の方法を使用してください。

バックグラウンド タスクをスケジュールするために rake(or runner)/cron/whenever gem を使用していましたが、サーバーの負荷が非常に高いことに気付きました。これは、rake/runner が Rails 環境をロードすることで常に影響を受けるためです。Delayed_Job ワーカーは実行中の Rails デーモンであるため、バックグラウンド タスクが必要になるたびに Rails を常に起動する必要はありません。

于 2012-04-03T21:59:57.960 に答える
2

夜間の統計とレポートの生成、および特定の間隔でのデータのスクレイピングのために、複数のcrondelayed_jobsを実行しています。これが私がそれをする方法です:

https://aaronvb.com/articles/recurring-delayed-job-with-cron.html

于 2010-10-29T00:08:06.600 に答える
2

いつでも素晴らしい作品。

私も好きrufus-scheduler

/config/initializers/task_scheduler.rb

次に、そのファイルで:

scheduler = Rufus::Scheduler.start_new  

scheduler.every("1m") do  
   DailyDigest.send_digest!  
end 

私はもともとこれがここに投稿されているのを見つけました

私はそれを試してみましたが、うまくいきます。

アップデート

そのリンクを振り返ってみると、私が働きたいと思う唯一の鉄道会社です。彼らはいくつかの多くの宝石を作り、コミュニティに多くを追加しました. 彼らは巨大なチームを持っていることは言うまでもありません!

于 2010-09-03T01:23:54.257 に答える
1

このための宝石を作成しました:

https://github.com/select/delayed_cron

現在、sidekiq とdelayed_job で動作します。すぐに resque を追加する予定です。これが少し遅れていることはわかっていますが、探していたものとほぼ同じです。

于 2014-05-25T05:05:02.300 に答える