Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Webサーバーとアプリケーションサーバー

Railsアプリのデプロイ方法を調べると、Apache、Unicorn、Puma、Phusion Passenger、Nginx、Rainbowsなどの多くの名前が表示されます。それらはすべてソフトウェアの「デプロイレール」カテゴリに当てはまるようですが、それらの間には重要な違いがあります。一部は「ウェブサーバー」であり、その他は「アプリサーバー」です。

どちらがどれで、各カテゴリがシステムのどこに当てはまるかを理解したら、導入の方がはるかに理にかなっています。 ただし、カテゴリは必ずしも明確ではありません。

ウェブサーバーとは何ですか。アプリサーバーとはどのように異なりますか。片方をもう片方なしで使用できますか?そして、ラックはどこに収まりますか?

Webサーバーとは何ですか?

ウェブサーバー は、ユーザーからWebサイトへの要求を受け取り、それに対して何らかの処理を行うプログラムです。次に、Railsアプリにリクエストを送信する場合があります。 NginxとApacheは、遭遇する2つの大きなWebサーバーです。

CSS、JavaScript、画像など、頻繁に変更されないものに対するリクエストの場合、Railsアプリはおそらくそれを表示する必要はありません。 Webサーバーは、アプリと通信することなく、リクエスト自体を処理できます。通常、その方が高速です。

Webサーバーは、SSL要求を処理し、静的ファイルとアセットを提供し、要求を圧縮し、ほとんどすべてのWebサイトが必要とする他の多くのことを実行できます。そして、Railsアプリがする リクエストを処理する必要がある場合、ウェブサーバーはリクエストをアプリサーバーに渡します。

アプリサーバーとは何ですか?

アプリサーバー Railsアプリを実際に実行するものです。 アプリサーバーはコードを読み込み、アプリをメモリに保持します。アプリサーバーがウェブサーバーからリクエストを受け取ると、Railsアプリにそのことを通知します。アプリがリクエストの処理を完了すると、アプリサーバーはレスポンスをウェブサーバーに(そして最終的にはユーザーに)送り返します。

ほとんどのアプリサーバーは、その前にWebサーバーがなくても、単独で実行できます。それはおそらく開発モードで行うことです! ただし、本番環境では通常、前面にWebサーバーがあります。 一度に複数のアプリを処理し、アセットをより高速にレンダリングし、すべてのリクエストで実行する多くの処理を処理します。

トンがあります Mongrel(現在はあまり使用されていません)、Unicorn、Thin、Rainbows、PumaなどのRailsアプリ用のアプリサーバーの数。それぞれに異なる利点と異なる哲学があります。しかし、最終的には、それらはすべて同じことを達成します。つまり、Railsアプリを実行し続け、リクエストを処理します。

乗客はどうですか?

PhusionPassengerは少しユニークです。 「スタンドアロンモード」では、アプリサーバーのように機能します。 ただし、ウェブサーバーに直接組み込むこともできるため、必要はありません。 Railsアプリを実行するための別のアプリサーバー。

これは本当に便利です。特に、多数のアプリを実行することを計画していて、それぞれにアプリサーバーを設定することに時間を費やしたくない場合は特にそうです。 Passengerをインストールした後、Webサーバーを(アプリサーバーではなく)Railsアプリに直接向けるだけで、Railsアプリがリクエストの処理を開始します!

乗客は良い選択肢ですが、別のアプリサーバーを用意することもできます。 アプリサーバーを分離しておくと、ニーズに最適なアプリサーバーを柔軟に選択でき、独自に実行して拡張できます。それでも、次に新しい小さなアプリをデプロイするときに、もう一度試してみます。将来のアプリを同じサーバーに簡単にデプロイできるようになることを願っています。

ラックはどうですか?

Rackは、これらのアプリサーバーのいずれかがRailsアプリを実行できるようにする魔法です。 (またはSinatraアプリ、またはPadrinoアプリ、または…)

Rackは、Ruby Webフレームワーク(Railsなど)とアプリサーバーの両方が話す共通言語と考えることができます。どちらの側も同じ言語を知っているので、RailsとUnicornのどちらも相手について何も知らなくても、RailsはUnicornとUnicorntoRailsと通信できます。

それらはどのように関連していますか?

では、これはどのように組み合わされますか?

これらの部分のうち、Webリクエストは最初にWebサーバーにヒットします。リクエストがRailsが処理できるものである場合、Webサーバーはリクエストに対して何らかの処理を行い、アプリサーバーに渡します。アプリサーバーはRackを使用してRailsアプリと通信します。アプリでリクエストが完了すると、Railsアプリはアプリサーバーとウェブサーバーを介してアプリを使用しているユーザーに応答を送り返します。

具体的には、NginxがUnicornにリクエストを渡す場合があります。 UnicornはRackにリクエストを送信し、RackはRailsルーターにリクエストを送信します。Railsルーターは適切なコントローラーにリクエストを送信します。その後、あなたの応答は逆に戻ります。

この概要は簡略化される場合があります。 しかし、これらのカテゴリを知っているだけでも、遭遇したソフトウェアを適切なメンタルバケットに入れるのに役立ちます。

アプリサーバーとウェブサーバーがどのように連携するかを理解すると、サーバーの問題が発生した場合のデバッグがはるかに簡単になります。見ることができるさまざまな場所と、それらがどのように相互作用するかがわかります。そして、次の興味深いアプリサーバーが到着すると、それを交換するのがさらに簡単になります!

RailsがWebとどのように相互作用するかについて詳しく知りたい場合は、この記事「Railsセッションのしくみ」を確認してください。


  1. チャットボット:ウェブ/アプリ開発の未来

    チャットツールとロボットの融合により、Chatbot が形成されました。この概念は数年前に登場しましたが、最近では増加傾向にあり、無数の企業で広く採用されています。では、チャットボットについてはどうでしょうか? ボットは基本的に、実際の人間と同じように会話する仮想ロボット サービスです。彼らは決して苦しむことはなく、あなたの命令に従い続けます。チャットボットは AI と ML に従って会話のリズムを収集するため、人間の会話をコピーし、予測と思考を理解し、それに応じて反応することができます。したがって、会話チャットボットが多ければ多いほど、よりインテリジェントになります。いくつかの企業は、ユー

  2. Flotato:Mac で Web アプリを入手

    何かを検索するときはいつでも、多くのタブを開く傾向があります。これにより、多くの場合、Web ブラウザーが雑然とします。それを管理する方法を考えていますか?タブを 1 つずつ開くことは、これに対する実用的な解決策ではありません。 今何?すべての Web サイト用の Web アプリを取得することは、すばらしいオプションです。しかし、それは可能ですか?はい、そうです! Flotato を使用すると、Mac で必要な Web サイト用のミニ Web アプリを取得できます。 Flotato は自分自身をアプリに変えることができ、デスクトップ用の電話 Web アプリとして機能します。コンパクトで、シ