1

Rails アプリケーションは実際にどのように機能しますか? nginx +パッセンジャー+ Ubuntuがあるとしましょう。私の質問は次のとおりです。

  • nginxは実際に何をしているのですか?
  • リクエストをレールアプリに転送するにはどうすればよいですか?
  • 乗客の責任は?
  • そしてラックとは?
  • Railsアプリは、ApacheなしでWebrickだけで実際にどのように機能しますか?

「 nginxがリクエストを処理する」などの回答を私に与えないでください。もっと何かが必要です。または、これについて読むことができる情報源を知っているかもしれません.

4

2 に答える 2

5

ストーリーを次のように理解するのに役立ちます。

昔、ウェブが新しくなったときは、静的なページしかありませんでし.htmlた。そのため、Web サーバー ソフトウェアはファイルを効率的に読み取り、ファイルの内容をリクエスター (ブラウザー) に送信します。

次に、動的 Web が登場しました。ここでは、リクエストに応じて、ページのコンテンツをオンザフライで動的に生成する必要がありました。これは、サーバー上で実行されているプログラムが必要であり、何が要求され、何が応答されるべきかを理解する必要があったことを意味します。その結果誕生したのがCGI (Common Gateway Interface). ファイルを読み取っ.htmlてその内容をクライアントに送信する代わりに、サーバー上でプログラムを実行して、リクエスタに送信できるCGIファイルを吐き出します。htmlこれらの CGI スクリプトは、さまざまなプログラミング言語で記述できます。

CGI スクリプトの複雑さが増すにつれて、すべての一般的な (および機械的な) ロジックを抽象化する特殊なヘルパー アプリケーションが必要になりました。これにより、ビジネス ロジックの記述が簡素化されます。これらの特殊なヘルパーは、一般にapplication serversまたはと呼ばれcontainersます。

これらのコンテナーは、Web サーバーを単純かつ無駄のない状態に保つのにも役立ちます。これは、CGI スクリプトの実行の複雑さ (スクリプトがどのプログラミング言語で記述されているかに関係なく) が Web サーバーから委任されるようになったためです。Web サーバーが知る必要があるのは、リクエスト URL が で終わる場合はリクエスト.phpを に委任するFASTCGIか、URI が で始まる場合は に委任する必要がある/javaapp/ということだけです。これらのヘルパー アプリケーションをまたはtomcatと呼びましょう。APP SERVERSContainer

Passenger は、RACK アプリケーションを実行するように設計されたコンテナーの 1 つです。

ラックとは:Rack CGI が Web サーバーが外部プログラムを実行するための標準化されたインターフェースであるのと同様に、コンテナーがアプリケーション (Rails アプリケーションなど) をロードするための標準化されたインターフェースであると言えます。

Rack は、アプリケーション フレームワーク (rails、merb、sinatra など) の標準インターフェイスを定義します。アプリケーション フレームワークがラック インターフェイスに準拠している場合、 はcontainerそれをロードして実行する方法を知っています。

ノート:

概念を非常に単純化しようとしました。これは、完全な説明にはほど遠いものです。これが独学を始めるきっかけになれば幸いです。

于 2013-11-01T19:02:05.907 に答える
2

Phusion Passenger の著者はこちら。この 2 つの文書で、あなたの質問のほとんどが詳細に説明されていると思います。

ラックに関しては、標準化されたインターフェースです。Web サーバーが異なれば、動的アプリケーション用の API も異なる傾向があります。すべての Ruby フレームワークがすべての単一サーバー用のアダプターを作成する必要がないようにするために、すべての Ruby フレームワークはすべて Rack インターフェースを実装しています。同様に、すべてのサーバーもRackを話します。これにより、フレームワークがそのサーバーを特別にサポートしなくても、異なるサーバー間を切り替えることができます。また、サーバーがそのフレームワークを特別にサポートしなくても、異なるフレームワーク間を切り替えることができます。

WEBRick は Rails にどのようにサービスを提供しますか? WEBrick を起動すると、あるポートで TCP ソケットが開かれ、そのポートで接続がリッスンされます。新しい接続が入ると、データを HTTP として解析し、内部データ構造を作成し、Rails Rack オブジェクトを呼び出してこれらのデータ構造を Rails に渡します。Rails Rack オブジェクトは Rails への主要なエントリ ポイントであり、プログラムの起動時に作成されます。Rack オブジェクトが戻ると、WEBrick は返されたデータ構造を HTTP データに変換し、ソケットを介して書き込みます。

このハイレベルな説明は、すべての Ruby サーバーがどのように機能するかをほぼ説明しています。Phusion Passenger も高レベルでこのように機能しますが、プロセス管理、ロード バランシング、セキュリティ チェックなどに関しては、より多くの手順が必要です。インプロセス ライブラリ。Phusion Passenger のアーキテクチャ概要ドキュメントで説明されています。

于 2013-11-01T21:42:27.447 に答える