delayed_job位于http://github.com/collectiveidea/delayed_job
delayed_job能否执行cron任务?比如每天凌晨1点运行一个脚本。或者每隔1小时运行一次脚本。
如果没有,哪些合适的宝石可以做到这一点?是否可以使用浏览器远程监控,并记录成功和错误?
答案 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。我知道这有点晚了,但它确实完全符合您的要求。