(備忘録)railsにおけるwebサーバー、アプリケーションサーバー、Rackについての備忘録

Webサーバーとは

ユーザーから送られてきた自サイトへのリクエストを受け取り、何らかの処理を加えるプログラム。場合によってはrailsアプリケーションにリクエストを投げる。 develop環境ではwebサーバーを使わず、単体で実行できることが多いが、production環境ではwebサーバーをアプリケーションサーバーの手前に置くことが多い。それはwebサーバーが複数のアプリケーションを一度に処理したり、アセットを素早くレンダリングしたり、リクエストごとの多くの処理をさばいたりしてくれる為。 代表例・・・Nginx(エンジンエックス),Apache

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

railsアプリケーションを動かしているもの。アプリケーションサーバーはコードを読み込み、アプリケーションをメモリに保存する。アプリケーションサーバーはwebサーバーからリクエストを受け取ると、railsアプリケーションにそのことを知らせる。アプリケーションがリクエストを処理するとアプリケーションサーバーはそのレスポンスをwebサーバーに返す。 代表例・・・Unicorn,Puma

Rackとは

アプリケーションサーバーとアプリケーションフレームワークのインターフェースを共通化した仕様であり実装となっているライブラリ。Rackを使えばどのアプリケーションサーバーであってもrailsアプリケーションを動かすことができる。(Rack登場以前はアプリケーションサーバーとフレームワークが密結合しており、Aというフレームワークでは、Bというアプリケーションサーバーは使えないという事例があった) Rackはアプリケーションサーバーとフレームワークの共通言語のようなもの。

webサーバーとアプリケーションサーバー、Rackの介した流れ

まず、Webリクエストはwebサーバーが受け取る。そのリクエストがrailsで処理できるものであれば、webサーバーはリクエストに処理を加えてアプリケーションサーバーに渡す。アプリケーションサーバーはRackを使いrailsアプリケーションに話しかける。railsアプリケーションがリクエスト処理を終えると、railsはレスポンスをアプリケーションサーバーに返す。そしてwebサーバーはアプリケーションを使ってユーザーにレスポンスを返す。

参考記事

qiita.com