我有一个部署了heroku的Rails 3应用程序。我在app/workers/task_worker.rb
:
class TaskWorker
include Sidekiq::Worker
def perform
...
end
end
如何在每天上午12:01安排TaskWorker.perform_async
的执行?
答案 0 :(得分:5)
您可能也希望查看sidetiq
。 https://github.com/tobiassvn/sidetiq gem通过ice_cube
gem支持复杂的计时表达式。
我个人觉得拥有一块可以与sidekiq无缝融合的宝石很舒服。
这样的事情应该有效:
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。我给你的表达应该绕过这个问题。
答案 1 :(得分:2)
我不喜欢Sidetiq增加Sidekiq的开销,所以我找到了不同的解决方案。
显然Heroku有一个鲜为人知但免费的scheduler addon,允许你每10分钟,每小时或每天运行一次rake任务。这是Heroku对cron职位的回答,很不错,它是一个免费的附加组件。它应该适用于大多数非关键性调度。
Heroku在他们的文档中声明调度程序是"尽力而为"可能偶尔(但很少)错过预定活动的服务。如果 critical 运行此作业,您可能想要使用custom clock process。定制时钟流程更可靠,但它们会计入您的dyno小时数。 (因此,就像任何其他过程一样产生费用。)
目前看来clockwork是Heroku上推荐的时钟进程。
答案 2 :(得分:-3)
我说明显了,但是当时每天晚上有一个Cron Job调用Sidekiq工作有什么问题?