2009-05-04 16 views
11

Phusion Passengerで複数のRuby on Rails Webアプリケーションを実行するApache2 Webサーバーを設定しています。私は、Passengerが要求を処理するRubyプロセスを生成することを知っています。Phusion Passengerはスレッドとプロセスをどのように再利用しますか?

  • 同時に複数のリクエストを処理する必要がある場合、Passengerは複数のプロセスまたは複数の(Ruby)スレッドを生成しますか?どのように私はそれが常にシングルスレッドプロセスを生成するように構成するのですか?
  • 2つのRailsアプリケーションがある場合、アプリケーションAのリクエストがプロセス1に進み、その後、アプリケーションBがリクエストされたとします。プロセス1がこの要求を同様に処理することは可能でしょうか?これはいつ、どのように可能ですか?言い換えれば、1つのプロセスが複数のRailsアプリケーションの要求を処理できるかどうかです。
  • 複数のURLと複数の仮想ホスト(http://、https://など)にエクスポートされた同じRailsアプリケーションがあります。同じプロセスが異なる仮想ホストに対応できるでしょうか? (これに対する答えは「はい」と思われます。仮想ホストAへのリクエストに答えるグローバル変数を設定しました。仮想ホストBの値を取得できました。)

答えて

12

一般に、フレームワークとアプリケーションコードがメモリにプリロードされているApplicationSpawner、またはフレームワークコードを持つFrameworkSpawnerをフォークすることにより、新しいプロセスを生成します。

私が知る限り、乗客はスレッドを扱っていません。代わりに、アプリケーションで負荷が増加すると、そのアプリケーションのApplicationSpawnerがフォークされ、別のインスタンスが初期化されます。負荷が減少すると、1つまたは複数のアプリケーションインスタンスが強制終了されます。

Passengerが特定の方法で設定されている場合(「スマート」スポーン方法を選択すると信じます)、レールコードをロードするFrameworkSpawnerが作成されますが、アプリケーションコードはロードされず、そのバージョンのRailsを使用しています。

だからあなたの質問にお答えします

  • それはそれは負荷が十分に高いことを決定した場合、追加のプロセスを起動、その後、順次それらを提供します。

  • いいえ1つのプロセスは、1つのRailsアプリケーションにしか属しません。

  • 私はこの1つを概観していますが、あなたの実験は理にかなっています。乗客は、サーバー設定のさまざまな場所から実行されているにもかかわらず、同じアプリケーションについて話していることを理解するには十分にスマートでなければなりません。おそらく、アプリケーションのファイルシステムのパスに基づいています。

編集:私は少しこれを読んだ。私は主に正しいと分かりましたが、技術的な詳細は少しばかりでした。 Passenger documentation

+0

有料版の乗客には、スレッドとプロセスを生成するオプションが追加されました。 – Kris

6

うわー、バークは正しいです。 3番目の質問の場合、Phusion Passengerはアプリケーションルートパスでアプリケーションを認識します。したがって、たとえあなたが2つの仮想ホストを持っていても、両方が同じDocumentRootを指していれば、Phusion Passengerはそれらが同じアプリだと思うでしょう。

関連する問題