2017-06-03 65 views
0

puma的文檔指示可以使用USR1信號啓動分階段重啓。但我不清楚如何使用這個做滾動重啓。如果我的目錄/ home/abc/rails_app和/ home/abc/rails_app_updated包含了我的代碼的一個副本以及新的更改,是否有想告訴我們新代碼重新啓動時彪馬的方式?我在這方面找不到任何明確的答案。使用Puma零宕機時間部署

+0

你有什麼東西跑到彪馬面前?一些像Varnish,nginx,haproxy或類似的反向代理/緩存? –

回答

1

Puma在啓動時載入您的代碼,然後您可以刪除導軌應用程序,並且事情仍然會繼續工作(基本上)。所以你可以更新代碼,而彪馬甚至不會注意到。發送USR1信號的功能是讓puma重新加載(新)代碼,同時優雅地處理現有的連接。所以不需要有兩個獨立的目錄,你可以更新代碼。

如果您確實需要分離目錄,您可以只有一個符號鏈接目錄指向您想要成爲當前代碼並且由Puma使用的代碼(capistrano使用此策略,它具有符號鏈接'current'指着最新版本)。然後發送美洲獅USR1,它會重新加載給定目錄中的代碼。

請讓我知道你是否需要更多的指針。

編輯:Probabaly我不是很精確。 Puma實際上並不處理(重新)加載文件,這是由Rails處理的(Puma只啓動Rack應用程序,或者在USR1信號上,將重新啓動應用程序)。在開發模式下,Rails會在每次請求時重新加載文件,這在更改代碼時非常方便。在生產這些設置一般(從config/environments/production.rb)適用於:

# Code is not reloaded between requests. 
    config.cache_classes = true 

    # Eager load code on boot. This eager loads most of Rails and 
    # your application in memory, allowing both thread web servers 
    # and those relying on copy on write to perform better. 
    # Rake tasks automatically ignore this option for performance. 
    config.eager_load = true 

更多細節in the rails guides

如果你真的想下去拉比索爾可以看看什麼cache_classes確實在軌道來源,但我不熟悉這一點。

尼爾

+0

第一段非常有用。我找不到任何明確的文件說Puma啓動後更改代碼是安全的,而且是預期的。如果時間允許,我會獎勵賞金。 – user782220

相關問題