10

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

delay_job 有能力做 cron 任务吗?比如每晚凌晨 1 点运行一个脚本。或者每 1 小时运行一次脚本。

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

4

6 回答 6

21

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

相反,我建议您使用when gem:

http://github.com/javan/无论何时

When 是一个 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

是一个关于如何使用它的 RailsCast 视频。

以及相应的ASCIICast

于 2010-09-03T01:18:24.847 回答
4

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

随时检查(及其Railscast)以轻松安排可以运行 rake 任务(或 thor 或 shell 脚本或其他任何东西)的 cron 作业。您可以使用 rake 任务来更新模型,然后拥有某种仪表板控制器查看各种状态。

于 2010-09-03T00:36:00.120 回答
3

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

Clockwork 作为一个单独的守护进程运行,可用于触发任何类型的作业,这些作业要么被添加到作业队列系统中,要么立即运行。

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

我正在使用 rake(或 runner)/cron/whenever gem 来安排后台任务,但发现我的服务器负载太高了,因为我会不断受到 rake/runner 加载 rails 环境的影响。Delayed_Job worker 是你的 Rails 守护进程,它保持运行,所以你不会在每次需要后台任务时都不断地启动 Rails。

于 2012-04-03T21:59:57.960 回答
2

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

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

于 2010-10-29T00:08:06.600 回答
2

每当工作得很好。

我也喜欢rufus-scheduler

/config/initializers/task_scheduler.rb

然后在那个文件中:

scheduler = Rufus::Scheduler.start_new  

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

我最初发现这个贴在这里

我试过了,效果很好。

更新

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

于 2010-09-03T01:23:54.257 回答
1

我为此创建了一个宝石:

https://github.com/sellect/delayed_cron

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

于 2014-05-25T05:05:02.300 回答