2010-09-02 49 views

回答

4

我认为cron是比delayed_job更好的工具。我之前在一个项目中使用过它,它确实擅长在后台或特定时间执行任务。但是,对于定期发生的重复性任务,我认为cron是最好的工具。

检出whenever(及其Railscast)可轻松调度可执行rake任务(或thor或shell脚本或其他任务)的cron作业。您可以使用rake任务来更新模型,然后进行某种排序仪表板控制器可以查看各种状态。

21

我参与了一个尝试使用DelayedJob来安排未来项目的项目。它吸了。

相反,我建议你使用每当宝石:

http://github.com/javan/whenever

当是一个Ruby的宝石,提供了定义cron作业一 清晰的语法。 它输出有效的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 

Here的关于如何使用它RailsCast视频。

和相应的ASCIICast

+0

为什么/ delayed_job是如何吸引你的? – sscirrus 2011-10-09 23:06:22

+1

我发现DJ工作人员不断冻结,他们很难继续跑步。 我已经切换到Sidekiq并从未回头。这是完美的。绝对出色的作品。我希望我的公司能够为Sidekiq Pro的附加功能付出代价,仅仅因为它太棒了。 – cpuguy83 2013-01-07 15:29:03

+1

它确实很烂。我也去过那里。 – OneChillDude 2014-10-01 20:42:12

2

每当工作很好。

我也很喜欢rufus-scheduler

/config/initializers/task_scheduler.rb 

然后在该文件中:

scheduler = Rufus::Scheduler.start_new 

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

我最初发现这个贴here

我已经尝试过了,效果很好。

更新

现在我回头看这个链接它几乎是唯一轨道公司,我想为之工作。他们制作了许多宝石,并为社区增加了很多。更何况他们有一个庞大的团队!

3

您也可以使用发条宝石: https://github.com/adamwiggins/clockwork-rails-dj

发条可以作为独立的后台程序,可以用来触发任何类型的,要么被添加到该职位一个工作排队系统或马上运行。

使用Delayed_Job可以分配多个节点(或不是)的作业排队系统。 使用其他方法在适当的时间将作业添加到队列中。

我正在使用rake(或runner)/ cron /每当宝石安排后台任务,但发现我的服务器负载非常高,因为我会不断用rake/runner加载rails环境。 Delayed_Job工作人员是您的rails守护进程保持运行,所以每次需要后台任务时都不会不断启动Rails。

-1

我创建了这个宝石:

https://github.com/sellect/delayed_cron

它与sidekiq和delayed_job的目前。希望尽快添加resque。我知道这有点晚,但它确实和你要找的东西差不多。

+0

自2014-03-06起,delayed_cron gem与delayed_job无法正常工作。即使在修复DelayedCron :: Jobs :: DelayedJob#之后,执行gem仍然无法正常工作:具有间隔的cron作业不会重新计划(无论作业是否成功完成)。 – cydparser 2015-04-03 01:39:11

+0

@cydparser我个人不会使用delayed_job作为delayed_cron的后台处理器,我更喜欢sidekiq。但是,版本0.2.2和0.2.3中的delayed_cron类中的DelayedJob类已更新。你使用的是哪个版本的宝石?无论哪种方式,我计划更新delayed_cron以使用Rail的ActiveJob来抽象作业适配器,以便与将来的不同背景处理器兼容不应成为问题。 – jGRUBBS 2015-04-10 08:34:58