2017-06-03 16 views
0

pumaのマニュアルは、段階的再起動をUSR1信号で開始できることを示しています。しかし、私はこれを使用してローリング再起動を行う方法については不明です。私のディレクトリの/ home/abc/rails_appと/ home/abc/rails_app_updatedに新しい変更が加えられたコードのコピーが含まれている場合、再起動時に新しいコードがどこにあるのかをpumaに伝える方法があると思われますか?私はこれに決定的な何かを見つけることができませんでした。Pumaを使用した停止時間のゼロ化

+0

あなたはプーマの前で実行していることはありますか?ワニス、nginx、haproxyなどのリバースプロキシ/キャッシュ –

答えて

1

Pumaは起動時にコードを読み込みます。その後、レールアプリを削除しても問題は解決しません(基本的には)。コードを更新すれば、Pumaは気付かないでしょう。 USR1シグナルを送信することは、既存の接続を適切に処理しながら、(新しい)コードをリロードすることです。したがって、2つの別個のディレクトリを用意する必要はなく、コードをその場で更新することができます。

ディレクトリを分割する必要がある場合は、現在のコードでPumaが使用するコードを指す単一のシンボリックリンクされたディレクトリを持つことができます(capistranoはこの戦略を使用します。最新のリリースを指している)。そして、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がレールのソースで正確に何をするのか見てみることができますが、私はそれに精通していません。

Niels

+0

最初の段落は非常に便利です。私は、プーマが始まった後のコードの変更が安全で、意図されたものであると言っている決定的な文書を見つけることができませんでした。時間が許せば賞金を授与します。 – user782220

関連する問題