2018-03-01 by Ray Chou
它們只能提供靜態檔案,如果加上 modules,也能提供像 PHP 寫的動態 web apps。
Apache 比較受歡迎,而且功能比較多;Nginx 比較小也比較快,但是功能比較少。
單靠 Apache 或 Nginx 都不能直接提供 Ruby web apps,還要跟某些附件組合在一起才行。
Apache 跟 Nginx 也能當做 reverse proxies 來用,也就是說,當它們收到一個 HTTP 請求進來的時候,會把它轉給另一個 server,這個 server 也能以 HTTP 交談。當這個 server 回應一個 HTTP response,Apache/Nginx 會把這個 response 回傳到 client 端。
註:網路上 Deploy Rails App 相關文章大多使用 Nginx
參考 "A Web server vs. an app server" by Justin Weiss
目前所有的 Ruby app servers 都能以 HTTP 交談,不過有些 app servers 可以直接公開在 Internet 的 port 80,其他的則不行。
可以直接公開到 Internet 的 App servers:Phusion Passenger, Rainbows
不能直接公開到 Internet 的 App servers:Unicorn, Thin, Puma.
為什麼有些 app servers 必須放在 reverse proxy 的後面?
Unicorn vs. Puma vs. Passenger: which app server is right for you? 2017 by Derek
重點:Passenger 要付費的企業版才有 Multithread 功能。
Puma: A modern, concurrent web server for Ruby.
"How To Deploy a Rails App with Puma and Nginx on Ubuntu 14.04", 2015-04-01 by by Mitchell Anicas
Rails Server with Apache + Puma (via reverse proxy) 2015-01-18 by Deniel
Rack 讓任何一個 app servers 都可以執行你的 Rails app.
你可以把 Rack 想成 Ruby web frameworks (例如 Rails) 和 app servers 都會說的一種共同語言。因為彼此都會同個語言,所以 Unicorn 跟 Rails 不必知道對方是什麼東西就可以交談。
前面提到的 deployment 都是指的如何在一部伺服器上啟動一個 Ruby app.
但在這之前還有許多準備工作要做,例如:
在 Capistrano 的語彙中,deployment 指的就是這些準備工作。Capistrano 並不是一個 application server,而是一個處理這些準備工作的自動化工具。你告訴 Capistrano 你的 server 在哪裡,以及每當你要 deploy 一個新版 app 的時候要執行哪些命令,Capistrano 會為你將 Rails app 上傳到 server 上,並執行你所指定的命令。
Capistrano 總是要跟 application server 搭配使用。它不能取代 application servers。同樣的,application servers 也不能取代 Capistrano,它們可以和 Capistrano 搭配使用。
當然你也可以不使用 Capistrano. 如果你喜歡自己用 FTP 上傳 Ruby app,然後每次手動執行相同的步驟,那當然可以這麼做。其他人則是厭倦了,所以他們用 Capistrano 來自動化這些步驟。