Rails 3 アプリを heroku にデプロイしました。私はSidekiqワーカーを持っていますapp/workers/task_worker.rb
:
class TaskWorker
include Sidekiq::Worker
def perform
...
end
end
TaskWorker.perform_async
毎日午前12時1分に実行をスケジュールする方法は?
Rails 3 アプリを heroku にデプロイしました。私はSidekiqワーカーを持っていますapp/workers/task_worker.rb
:
class TaskWorker
include Sidekiq::Worker
def perform
...
end
end
TaskWorker.perform_async
毎日午前12時1分に実行をスケジュールする方法は?
こちらも見てみるといいかもしれませんsidetiq
。https://github.com/tobiassvn/sidetiq gem は、gem を介して複雑なタイミング表現をサポートしますice_cube
。
個人的には、sidekiq とシームレスに統合できる gem があると快適だと感じました。
そのようなものはうまくいくはずです:
class TaskWorker
include Sidekiq::Worker
include Sidetiq::Schedulable
recurrence do
daily.hour_of_day(0).minute_of_hour(1)
end
def perform
# do magic
end
end
ただし、一部の時間表現にはパフォーマンス関連の問題があるため、この gem を使用する場合は注意してください。https://github.com/tobiassvn/sidetiq/wiki/Known-Issues . 私があなたに与えた表現は、この問題を回避するはずです。
Sidetiq が Sidekiq に追加するオーバーヘッドが気に入らないので、別の解決策を探しました。
どうやら Heroku にはあまり知られていない無料のスケジューラ アドオンがあり、10 分ごと、1 時間ごと、または毎日、rake タスクを実行できます。これは cron ジョブに対する Heroku の回答であり、無料のアドオンであることは素晴らしいことです。ほとんどの重要でないスケジューリングで機能するはずです。
Heroku のドキュメントでは、スケジューラは「最善を尽くす」サービスであり、スケジュールされたイベントをときどき (ただしめったに) 見逃す可能性があると述べています。このジョブを実行することが重要な場合は、カスタム クロック プロセスを使用することをお勧めします。カスタム クロック プロセスは信頼性が高くなりますが、dyno 時間にカウントされます。(そのため、他のプロセスと同様に料金が発生します。)
現在、Heroku で推奨されるクロック プロセスはclockworkのようです。
当たり前のことを言っているのですが、その時間に毎晩 Sidekiq ジョブを呼び出す Cron ジョブを持っていて何が悪いのでしょうか?