この質問はおそらく明らかですが、まだよくわかりません。私の知る限り、Rails アプリは、Apache や nginx などの Web サーバー、または Heroku などのクラウド プロバイダーを使用してデプロイされます。
Apache/nginx のような Web サーバーの責任は何ですか。Rails アプリは、なぜ WEBrick を実行しただけでは実行されないのでしょうかrails server
。
この質問はおそらく明らかですが、まだよくわかりません。私の知る限り、Rails アプリは、Apache や nginx などの Web サーバー、または Heroku などのクラウド プロバイダーを使用してデプロイされます。
Apache/nginx のような Web サーバーの責任は何ですか。Rails アプリは、なぜ WEBrick を実行しただけでは実行されないのでしょうかrails server
。
基本的に、あなたの質問は次のように聞こえます:
Q: WebBrick を (RoR 開発専用ではなく) 運用サーバーとして使用しないのはなぜですか?
ここにいくつかの良い議論があります:
Arch Linuxのドキュメントから:
デフォルトの Ruby On Rails HTTP サーバー (WebBrick) は基本的な開発には便利ですが、本番環境での使用はお勧めしません。一般に、Web サーバー (Apache または Nginx) に Phusion Passenger モジュールをインストールするか、リバース プロキシとして機能する別の Web サーバーと組み合わせた専用のアプリケーション サーバー (Mongrel や Unicorn など) を使用するかを選択する必要があります。
あなたの質問は、「Ruby アプリに Web 層とアプリケーション層が分かれているのはなぜですか?」と言い換えてもいいでしょう。
Ruby アプリケーションの本番デプロイメントには、通常、Web 層 (Apache や Nginx など) とアプリケーション層 (Unicorn、Thin、Passenger など) があります。Web 層とアプリケーション層は、異なる目的を果たします。
Web 層 - HTTP 接続を管理します。HTTP 接続は永続的で長寿命になる可能性があります。通常、実稼働環境の構成の一部を担当します (書き換えによる URL の正規化、不正な要求のカテゴリのブロックなど)。HTTPS ターミネーションを担当する場合があります (特に、ロード バランサーのない環境で)。Web サーバーが得意とするタスクである静的アセットの提供を担当することもあります。ほとんどの Web サーバーは、要求ごとに必要なリソースを最小限に抑えて、数千の同時要求を処理できます。そのため、Web サーバーがアプリ層にヒットすることなく要求を処理できる場合は、Web サーバーが要求を処理することが強く推奨されます。
アプリケーション層 - アプリケーション自体への要求を管理します。これには通常、ある程度のアプリケーション ロジックとデータ ストレージ層へのアクセスが必要です。リクエストは一般的に短命であると予想されます (Rails Live Streaming を除いて、最大で数秒、理想的には数十ミリ秒)。アプリケーション層では同時実行性がはるかに制限されます。ほとんどのアプリ サーバーは、はるかに少数の同時要求を処理できます (シン/ユニコーンのプロセスごとに 1 つ)。
このアーキテクチャは、他の言語 (PHP、Java) にも比較的共通していることに注意してください。これらの言語の違いは、これらの言語を実行しているシステムにも大きく当てはまります。
統合された Web 層とアプリケーション層で実行することは可能ですが、それには通常、要求をスレッドまたはプロセスから分離するシステムが必要です。つまり、同時要求ごとにスレッドまたはプロセスは必要ありません。これにより、開発側がいくらか複雑になりますが (Node.js を参照)、スケーラビリティーが大幅に向上する可能性があります。