2013-12-08 16 views

回答

3

沒有。維護模式唯一的作用是告訴路由器拒絕轉發新的Web請求。其他一切仍在運行,包括一次性調度程序(調度程序使用的):https://devcenter.heroku.com/articles/maintenance-mode

解決此問題的一種方法是讓您的計劃任務在延遲的作業處理系統中排隊作業(如delayed_job或resque )。這樣,您可以將工作指示器縮放到0,並且在停機期間不應發生任何嚴重事件,而不會意外地寫入數據庫或外部服務。

+1

請注意,創建延遲作業會寫入數據庫,如果您的停機時間與數據庫相關,則可能會造成問題。 –

2

我最近遇到了無法暫停或禁用Heroku調度程序的問題。我需要做一個數據庫升級,所以我不能使用延遲的工作建議。沒有找到更好的解決方案我寫了一個禁用耙子任務。

task :pause_scheduler => :environment do 
    if ENV['PAUSE_SCHEDULER'] == 'true' 
    puts 'Scheduler Paused' 
    exit 
    end 
end 

然後,我剛剛從:pause_scheduler,而不是從:environment所有我的Heroku調度cron作業的繼承和設置PAUSE_SCHEDULER環境變量爲「真」時,我想將其關閉。

heroku config:set PAUSE_SCHEDULER=true 

似乎工作得很好。無論如何刪除和重新創建我的所有計劃任務要好得多。

只要記住在完成後再打開它。

heroku config:set PAUSE_SCHEDULER=false 

希望有所幫助!