2009-05-21 58 views
8

對不起,如果這聽起來像一個愚蠢的問題,因爲它似乎是那些「沒有杜鵑」的事情之一,但有人可以向我解釋爲什麼Rails需要它自己的服務器(Mongrel,WEBrick,mod_rails等)和不能簡單地使用mod_ruby?爲什麼不能使用mod_ruby工作?

回答

7

所有運行mod_ruby的apache實例共享一個Ruby解釋器。這意味着它不能在共享主機上或在每臺機器上運行多個Rails應用程序的任何環境中使用。在一臺機器上運行同一個應用程序的多個副本也是可能的,但是你也可能很容易地遇到難以追蹤的錯誤。因爲rails是單線程的,所以每臺機器只運行一個ruby進程是不可想象的。

此外,它不能很好地執行。

對於深入討論更多知識,請this Phusion employee's blog

2

「mod_ruby使用每Apache進程一個解釋,這意味着應用 步行遍佈在命名空間彼此。至少對於Rails的,這 不能接受,所以如果你想要mod_ruby,那麼每個Apache安裝程序就有1個應用程序。「 - David Heinemeier Hansson

現在,它一直嘲笑一些,如果你仍然想使用它,請查看mod_ruby FAQ

Dreamhost曾嘗試包括紅寶石到他們的託管環境,這從他們對他們的結論博客從這一努力。

7

已經回答說mod_ruby會產生一個共享的Ruby解釋器,但是這個問題特別有問題的原因是它意味着相互之間的類相互碰撞。例如,考慮定義到特定數據庫的連接的ActiveRecord :: Base。這個類的狀態在不同的Rails應用程序中是不同的,所以只要有一個以上的Rails應用程序在同一個解釋器上運行,就會發生嚴重的階級戰爭。

另一個答案指出,Rails是單線程的,但這不一定是真正的Rails 2.2.2。我會留下這個作爲對這個答案的評論,但我在一個業障緊身衣:)