维护模式是否在Heroku上禁用调度程序

Kev*_*tre 5 heroku

维护模式是否关闭调度程序?如果不存在暂时禁用调度程序而不手动删除每个项目的方法?

use*_*983 8

我最近遇到了无法暂停或禁用Heroku调度程序的问题.我需要进行数据库升级,所以我无法使用延迟的工作建议.没有找到更好的解决方案我写了一点禁用rake任务.

task :pause_scheduler => :environment do
  if ENV['PAUSE_SCHEDULER'] == 'true'
    puts 'Scheduler Paused'
    exit
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我只是继承:pause_scheduler而不是来自:environment我的所有Heroku调度程序cron作业,并在我想关闭它时将PAUSE_SCHEDULER环境变量设置为'true'.

heroku config:set PAUSE_SCHEDULER=true
Run Code Online (Sandbox Code Playgroud)

似乎工作得很好.比删除和重新创建我所有的预定作业要好得多.

你记得在完成之后再打开它.

heroku config:set PAUSE_SCHEDULER=false
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


Ari*_*Ari 5

不。维护模式唯一要做的就是告诉路由器拒绝转发新的Web请求。其他所有内容仍在运行,包括一次性测功机(计划程序使用的测功机):https : //devcenter.heroku.com/articles/maintenance-mode

解决此问题的一种方法是让您安排的任务仅在延迟的作业处理系统(例如delay_job或resque)中入队。这样,您可以将工作者动态数降低到0,并且在停机期间不会发生任何严重的事情,而不是意外地写入数据库或外部服务。

  • 请注意,创建延迟作业会写入数据库,如果您的停机时间与数据库相关,这可能是一个问题。 (2认同)