10

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

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

2 に答える 2

12

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

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

Passenger が特定の方法で構成されている場合 (「スマートな」スポーン メソッドを選択することによると思います)、Rails コードをロードする FrameworkSpawner が作成されますが、アプリケーション コードは作成されず、フォークしてロードし、そのバージョンを使用してアプリケーションを実行できます。 Railsの。

だからあなたの質問に答えるために:

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

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

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

編集:私は行って、これについて少し読みました。私はほとんど正しかったことがわかりましたが、技術的な詳細は少しずれていました. 乗客のドキュメントを参照してください

于 2009-05-05T05:49:10.660 に答える
6

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

于 2009-05-21T20:49:40.197 に答える