質問

Phusion Passengerで複数のRuby on Rails Webアプリケーションを実行するApache2 Webサーバーをセットアップしています。 Passengerはリクエストを処理するためにRubyプロセスを生成することを知っています。次の質問があります:

  • 複数のリクエストを同時に処理する必要がある場合、Passengerは複数のプロセスまたは複数の(Ruby)スレッドを生成しますか?常にシングルスレッドプロセスを生成するように構成するにはどうすればよいですか?
  • 2つのRailsアプリケーションがある場合、アプリAのリクエストがプロセス1に進み、その後アプリBのリクエストが到着すると想像してください。プロセス1がこのリクエストも処理する可能性はありますか?これはいつ、どのように可能ですか?つまり、1つのプロセスで複数のRailsアプリケーションのリクエストを処理できますか?
  • 同じRailsアプリケーションを複数のURLと複数の仮想ホスト(http://やhttps://など)にエクスポートしています。同じプロセスで異なる仮想ホストを提供できますか? (これに対する答えはイエスのようです。仮想ホストAへのリクエストに応答する際にグローバル変数を設定し、仮想ホストBの値を取得することができました。)
役に立ちましたか?

解決

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

パッセンジャーは、私の知る限り、スレッドを処理しません。代わりに、アプリケーションの負荷が増加すると、そのアプリケーションのApplicationSpawnerをフォークし、別のインスタンスを初期化します。負荷が減少すると、1つ以上のアプリケーションインスタンスが強制終了されます。

特定の方法でPassengerが構成されている場合(" smart" spawnメソッドを選択することで信じられます)、FrameworkSpawnerが作成され、railsコードはロードされますが、アプリケーションコードはロードされません。そのバージョンのRailsを使用するアプリケーション。

質問に答えるために:

  • それらを順番に処理し、負荷が十分に高いと判断した場合、追加のプロセスを生成します。

  • いいえ。 1つのプロセスは、単一のRailsアプリケーションにのみ属することができます。

  • これについてはちょっとおおざっぱですが、あなたの実験は理にかなっています。 Passengerは、サーバー構成内の異なる場所から実行されていても、同じアプリケーションについて話していることを把握できるほどスマートでなければなりません。おそらくアプリケーションのファイルシステムパスに基づいています。

編集:これについて少し調べてみました。私はほとんど正しかったことが判明しましたが、技術的な詳細は少しずれていました。 旅客ドキュメント

をご覧ください。

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top