2010-12-06 87 views

回答

7

大多數Ruby應用程序服務器將只運行一個Ruby進程(並且Ruby有一個全局解釋器鎖,這使得多線程相當無意義),這意味着它一次只能提供一個請求。至少可以說,這不會給你很好的表現。

有兩種解決方法:要麼運行多個Ruby應用程序服務器,並在它們前面放置負載平衡器或反向代理,例如, Nginx或Apache在Mongrels或Thin服務器之前(您運行的進程數量反映了您可以並行處理的請求數量)。或者運行Passenger,它是一個Apache或Nginx模塊,用於管理可隨負載變化而動態增長和縮小的應用程序池。第一個選項爲您提供了更多配置選項,但第二個選項更易於管理。你想要哪一個取決於你的用例。

當然還有其他解決方案,但它們適用於更具體的用例。例如,您可以編寫一個非常高性能的應用程序並使用Thin進行部署 - 但它需要您編寫一個事件驅動的應用程序。您無法部署Rails應用程序並期望獲得相同的性能。

2

你可以在技術上,但你通常不想要,因爲這會在提供像css或圖像這樣的靜態文件時帶來一點點的開銷。

3

在Phusion Passenger允許使用Apache和nginx託管Rails的情況下,部署Rails應用程序非常可怕且困難。 Apache是​​一個非常成熟的Web服務器,可以輕鬆擴展並可配置以滿足多種需求。 (nginx並不成熟,但效率非常高,也非常易於配置,是用於rails託管的Apache的一個很好的選擇。)Webrick和Mongrel非常適合開發,但除非您是專家,否則很難將其設置爲生產用途。

1

有許多方法可以在不涉及Apache的情況下部署Rails應用程序,但Apache是​​最流行的服務器,最穩定和可擴展的最成熟​​的服務器。 WEBrick和Mongrel都有各自的優點,但Apache僅僅是Web服務器的默認假設,並且在大多數情況下是阻力最小的路徑。

相關問題