使用Sidekiq安排后台任务

时间:2013-07-04 13:58:39

标签: ruby-on-rails-3 cron sidekiq

我有一个部署了heroku的Rails 3应用程序。我在app/workers/task_worker.rb

有一名Sidekiq工作人员
class TaskWorker
  include Sidekiq::Worker
  def perform
    ...
  end
end

如何在每天上午12:01安排TaskWorker.perform_async的执行?

3 个答案:

答案 0 :(得分:5)

您可能也希望查看sidetiqhttps://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工作有什么问题?