维护模式是否会关闭调度程序?如果不存在暂时禁用调度程序而不手动删除每个项目的方法吗?
答案 0 :(得分:6)
我最近遇到了无法暂停或禁用Heroku调度程序的问题。我需要进行数据库升级,所以我无法使用延迟的工作建议。没有找到更好的解决方案我写了一点禁用rake任务。
task :pause_scheduler => :environment do
if ENV['PAUSE_SCHEDULER'] == 'true'
puts 'Scheduler Paused'
exit
end
end
然后,我只是从:pause_scheduler
而不是从:environment
继承所有Heroku调度程序cron作业,并在我想关闭它时将PAUSE_SCHEDULER环境变量设置为'true'。
heroku config:set PAUSE_SCHEDULER=true
似乎工作得很好。比删除和重新创建我所有的预定作业要好得多。
请记住在完成后重新打开它。
heroku config:set PAUSE_SCHEDULER=false
希望有所帮助!
答案 1 :(得分:4)
不。维护模式唯一做的就是告诉路由器拒绝转发新的Web请求。其他一切仍在运行,包括一次性dynos(调度程序使用):https://devcenter.heroku.com/articles/maintenance-mode
解决此问题的一种方法是让您的计划任务只是在延迟的作业处理系统(如delayed_job或resque)中排队作业。这样,您可以将工作人员dynos缩小到0,并且在停机期间不会发生任何严重事故,而不是意外写入数据库或外部服务。