2013-01-06 56 views
9

嗨我在過去的半年裏一直在學習rails,並且在Heroku上有幾個應用程序。所以對於我來說,我認爲在萬維網上部署應用程序就像heroku push一樣簡單。但是,我剛剛開始第一次實習Rails,而我的一位前輩正在談論Apache和Nginx,我不確定它們是如何適合的,因爲我認爲應用程序只包含Rails +雲應用程序平臺。我已經查閱了它,但我仍然不知道它如何以及它在哪裏影響我的應用程序生命週期。有人可以解釋什麼/何地/何時使用網絡服務器?Rails:Web服務器(Apache/nginx/passenger)的用途是什麼?

回答

16

所以你已經有了你的Rails應用程序,而且你知道你有控制器和動作以及視圖,而不是。

當瀏覽器中的用戶轉到Heroku上的應用程序時,他們輸入指向Heroku服務器的URL。

Heroku服務器是Web服務器,它監聽您的用戶輸入的URL並將它們連接到您的Rails應用程序。 Rails應用程序做它的事情(獲取博客文章列表或其他),服務器將這些信息發回給用戶的瀏覽器。

您一直在使用網絡服務器,只是將它從您身上抽象出來,並且非常感謝Heroku。

所以生命週期是有點像這樣:

雖然你已經建立您的開發機器上的應用程序,你可能已經遇到了命令rails server。這會啓動一個名爲WEBrick的程序,它是一個Web服務器,並監聽3000端口。您可以通過http://localhost:3000進入您的應用程序。

WEBrick在端口3000上偵聽並響應來自用戶的請求,例如「嘿,給我一個帖子列表」命令。

當您將代碼投入生產時(在您的體驗中,通過heroku push),您會將代碼發送給爲您提供rails server等效產品的提供商。

生產設置(您的高級開發人員正在討論的)比您的開發機器上的本地設置rails server複雜一點。

在生產中,您的Rails服務器(通常是Unicorn,Passenger等)取代了WEBrick。

在很多生產設置中,還使用了另一個服務器,如Apache或nginx,並且是用戶在進入應用程序時連接的服務器。

該服務器通常作爲路由器的一部分來確定應該如何處理不同類型的請求。例如,對服務器上的靜態文件(css,images,javascript等)的請求可能只是由Apache或nginx直接處理,因爲它將靜態資產發送回客戶端的工作非常出色(而且速度很快)。

其他請求,例如「讓我列出所有博客文章」傳遞到Rails服務器(Unicorn,Passenger等),然後他們完成所需的工作並將響應發送給發送它的Apache/nginx回到客戶端。

Heroku在一個簡單易用的軟件包中完成了所有這些工作,但它聽起來像是你自己管理這個工作的地方,而不是使用Heroku。他們已經建立了自己的一系列網絡服務器,並且會以自己的方式做相當於heroku push的代碼,這些代碼會將代碼發送到服務器,並確保它們已啓動並運行,準備好響應用戶請求。

希望有幫助!

+0

非常感謝這個冗長的解釋! – Edmund

+0

謝謝。第一次我讀了關於做服務器工作的'rails side'的Passenger/Unicorn和Nginx/Apache做文件發送。到目前爲止,我對Nginx是否與Passenger等相同以及爲什麼在生產中需要兩個不同的服務器組件感到困惑。 –

1

Heroku是一項雲服務,意味着他們負責硬件和軟件,讓您可以無縫發佈應用程序,而不用擔心幕後發生的事情。所以你唯一需要做的就是將你的代碼推送到他們的Git和瞧。另一方面,Rails也可以部署在由您完全從頭開始構建的系統上,您不僅負責應用程序開發,還負責服務器維護和硬件選擇和/或軟件。然後,您可以在幾個能夠運行rails的應用程序服務器(如ngix)之間進行選擇。

希望有所幫助。

3

網頁需要Web服務器使它們在Internet上可用。

因此,一個全部是靜態內容的站點(全部只是.html頁面)只需要一個web服務器,這就是Apace,nginx等等來的地方。它們是Web服務器。

當您使用像rails這樣的框架時,會添加一個附加組件,一個應用程序服務器。這使用rails框架預處理頁面,然後(仍然)使用上述Web服務器使最終用戶可以通過瀏覽器訪問最終頁面(當然是.html)。

Passenger Phusion是一款應用服務器,通過rails可以幫助管理和自動部署代碼。

相關問題