delay_job 位于http://github.com/collectiveidea/delayed_job
delay_job 有能力做 cron 任务吗?比如每晚凌晨 1 点运行一个脚本。或者每 1 小时运行一次脚本。
如果没有,有什么合适的宝石可以做到这一点?是否可以使用浏览器对其进行远程监控,并记录成功和错误?
delay_job 位于http://github.com/collectiveidea/delayed_job
delay_job 有能力做 cron 任务吗?比如每晚凌晨 1 点运行一个脚本。或者每 1 小时运行一次脚本。
如果没有,有什么合适的宝石可以做到这一点?是否可以使用浏览器对其进行远程监控,并记录成功和错误?
我参与了一个尝试使用 DelayedJob 来安排未来项目的项目。它糟透了。
相反,我建议您使用when gem:
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。
您还可以使用 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。
我运行多个 cron delay_jobs 以进行夜间统计和报告生成,以及以特定间隔进行数据报废。这是我的做法:
https://aaronvb.com/articles/recurring-delayed-job-with-cron.html
每当工作得很好。
我也喜欢rufus-scheduler
/config/initializers/task_scheduler.rb
然后在那个文件中:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
我最初发现这个贴在这里
我试过了,效果很好。
现在我回头看看那个链接,它几乎是我唯一想为之工作的铁路公司。他们制作了许多宝石,并为社区增添了很多东西。更不用说他们有一个庞大的团队!
我为此创建了一个宝石:
https://github.com/sellect/delayed_cron
它目前适用于sidekiq 和delayed_job。希望尽快添加resque。我知道这有点晚了,但它几乎完全符合您的要求。