Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。4,712件42前置き(やや混乱しているので質問がわかりづらいかもしれません)大昔PerlでCGIによるWebアプリを作ったときに、ApatchでPerlで書いたプログラムを呼び出していた記憶があります。RailsRailsですが、Webサーバーとアプリケーションサーバーが分かれている印象です。CGI上記CGIのやり方ではWebサーバーは存在しますが、アプリケーションサーバーは存在しないと認識しています。Unicorn、Pumaといったように、ソフトウェアとしてWebサーバーとアプリケーションサーバーが分かれていると認識しています。Webサーバーとアプリケーションサーバーを同時に満たすものがある?WEBrickですが、Webサーバーとアプリケーションサーバーどちらの役目もしているような気がしていて混乱しています。(dev環境だとアプリケーションサーバーなど意識せずWEBrickだけで動いている気がする)Rackは各種アプリケーションサーバーの仕様の乱立を避けるために生まれた?各種アプリケーションサーバーがどんどん出てきたときに、デプロイの作業がバラバラとなり、それを救うためにRackが生まれたというような内容を見かけました。票10webサーバー、アプリケーションサーバー、Rack、Unicorn、Puma、Railsと言った用語や概念の理解がこんがらかっているように見えたので、このあたりをきれいに説明している記事を探してみました。以下の記事が回答にぴったりだと思います。http://www.justinweiss.com/articles/a-web-server-vs-an-app-server/この記事の中からnakanishiさんの理解に役立ちそうなセクションをピックアップして、ざっくり翻訳してみました。webサーバーとはwebサーバーはユーザー送られてきた自サイトへのリクエストを受け取り、なんらかの処理を加えるプログラムです。場合によってはあなたのRailsアプリケーションにリクエストを投げます。NginxとApacheは最も有名なwebサーバーです。CSSやJavaScript、画像など、頻繁に変化しないファイルへのリクエストであれば、Railsアプリケーションはそのリクエストを処理する必要がないかもしれません。webサーバーはRailsアプリケーションに処理を移譲することなく、そのリクエストを自分で処理できます。した方が通常は速く完了します。webサーバーはSSLリクエストや静的なファイルやアセット、圧縮されたリクエスト等を処理したり、その他大半のwebサイトが必要としそうな数多くの処理をこなしたりすることができます。あなたのRailsアプリケーションがリクエストを処理しなければならない場合は、webサーバーはリクエストをアプリケーションサーバーにパスします。アプリケーションサーバーとはアプリケーションサーバーはあなたのRailsアプリケーションを動かしているものです。アプリケーションサーバーはあなたのコードを読み込み、アプリケーションをメモリに保持します。アプリケーションサーバーはwebサーバーからリクエストを受け取ると、Railsアプリケーションにそのことを知らせます。アプリケーションがリクエストを処理すると、アプリケーションサーバーはそのレスポンスをwebサーバーに返します。(そのレスポンスは最終的にユーザーへ届きます。)大半のアプリケーションサーバーはwebサーバーを使わずに単体で実行できます。これはあなたがdevelopmentモードでやっていることです!しかしproduction環境ではwebサーバーを手前に置くことが多いはずです。webサーバーは複数のアプリケーションを一度に処理したり、アセットを素早くレンダリングしたり、リクエストごと発生する多くの処理をさばいたりしてくれます。Rails用のアプリケーションサーバーは山ほどあります。Mongrel(ただし最近はほとんど使われていない)、Unicorn、Thin、Rainbows、Pumaなどです。それぞれに異なる長所があり、異なる設計思想を持っています。いえ、みんなやっていることは一緒です。どのアプリケーションサーバーもあなたのRailsアプリケーションを動かし、リクエストを処理し続けています。RackとはRackは魔法です。Rackを使えばどのアプリケーションサーバーであってもあなたのRailsアプリケーションを動かすことができます。(Railsに限らず、SinatraやPadrinoであっても同じです)RackはRailsのようなRuby製のwebフレームワークとアプリケーションサーバーの両方が話せる共通言語のようなものだと考えてください。両者が共通言語を理解できるので、RailsはUnicornと話せますし、UnicronはRailsと話せます。RailsもUnicornも相手のことを知っておく必要は全くありません。webサーバーとアプリケーションサーバーはどういう関係なのか?それでは、この話を全部まとめるとどうなるでしょうか?まず、webリクエストはwebサーバーにぶつかります。そのリクエストがRailsで処理できるものであれば、webサーバーはリクエストに簡単な処理を加えてアプリケーションサーバーに渡します。アプリケーションサーバーはRackを使ってRailsアプリケーションに話しかけます。Railsアプリケーションがリクエストの処理を終えると、Railsはレスポンスをアプリケーションサーバーに返します。webサーバーはあなたのアプリケーションを使っているユーザーにレスポンスを返します。具体的に言えば、NginxはリクエストをUnicornに渡します。UnicornはリクエストをRackに渡します。RackはリクエストをRailsのrouterに渡します。routerはリクエストを適切なcontrollerに渡します。レスポンスが逆の順番で返されます。個の銅バッジありがとうございます。仕様や概念的な意味での理解はスッキリしました。serverという上記説明になかった新しいものなのでしょうか。unicornはアプリケーションサーバーなのかもしれません。14:11連投すみません。何度も読み返しつつ、Rackアプリケーションサーバーなどで検索しました。結果的に書いていただいた最後のところが重要ですね。いう処理の流れになっている。serverと呼んでいると認識しました。ありがとうございました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。pumaにおけるIPアドレス制限方法について0unicornは動いているのに、アプリの画面が表示されない。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。