Rails的cron任务的“delayed_job”真的吗?

时间:2010-09-02 23:55:02

标签: ruby-on-rails cron delayed-job whenever

delayed_job位于http://github.com/collectiveidea/delayed_job

delayed_job能否执行cron任务?比如每天凌晨1点运行一个脚本。或者每隔1小时运行一次脚本。

如果没有,哪些合适的宝石可以做到这一点?是否可以使用浏览器远程监控,并记录成功和错误?

6 个答案:

答案 0 :(得分:21)

我参与了一个试图使用DelayedJob来安排未来项目的项目。它很糟糕。

相反,我建议你使用每次 gem:

http://github.com/javan/whenever

  

每当Ruby gem提供一个   明确定义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

答案 1 :(得分:4)

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

查看whenever(及其Railscast)以轻松安排可以运行rake任务(或者Thor或shell脚本或其他任何内容)的cron作业。您可以使用rake任务进行更新你的模型,然后有一些仪表板控制器,可以查看各种状态。

答案 2 :(得分:3)

您还可以使用ClockWork gem: https://github.com/adamwiggins/clockwork-rails-dj

Clockwork作为一个单独的守护程序运行,可用于触发任何类型的作业,这些作业可以添加到作业排队系统或立即运行。

将Delayed_Job用于它的优点,一个可以分布在多个节点上的作业排队系统(或不是)。 使用其他东西在适当的时间将作业添加到队列中。

我正在使用rake(或者跑步者)/ cron /每当gem安排后台任务但是发现我的服务器负载非常高,因为我会不断地用rake / runner加载rails环境。 Delayed_Job worker是你的rails守护进程,它们一直在运行,因此每次需要后台任务时你都不会经常启动Rails。

答案 3 :(得分:2)

每当效果很好。

我也喜欢rufus-scheduler

/config/initializers/task_scheduler.rb

然后在那个文件中:

scheduler = Rufus::Scheduler.start_new  

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

我最初发现这张贴here

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

更新

现在我回顾那个链接,它几乎是我唯一想要为之工作的铁路公司。他们制作了许多宝石,并为社区增添了许多宝石。更不用说他们有一个庞大的团队!

答案 4 :(得分:2)

我运行多个cron delayed_jobs用于夜间统计和报告生成以及以特定间隔进行数据报废。我是这样做的:

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

答案 5 :(得分:0)

我为此创建了一个宝石:

https://github.com/sellect/delayed_cron

目前适用于sidekiq和delayed_job。希望尽快添加resque。我知道这有点晚了,但它确实完全符合您的要求。