为什么Rails不能与mod_ruby一起使用?

时间:2009-05-21 23:26:34

标签: ruby-on-rails ruby mongrel

我很抱歉,这听起来像是一个愚蠢的问题,因为它似乎是那些“没有”的东西之一,但有人可以向我解释为什么Rails需要自己的服务器(Mongrel,WEBrick,mod_rails等)并且不能简单地使用mod_ruby?

3 个答案:

答案 0 :(得分:7)

所有运行mod_ruby的apache实例共享一个Ruby解释器。这意味着它不能在共享主机上使用,也不能在每台机器上运行多个Rails应用程序的任何环境中使用。可能可以在一台计算机上运行同一应用程序的多个副本,但您也可能轻松地遇到难以追踪的错误。因为rails是单线程的,所以每台机器只运行一个ruby进程是不可想象的。

此外,它表现不佳。

要进行更深入的讨论,请查看this Phusion employee's blog

答案 1 :(得分:7)

已经回答mod_ruby会产生一个共享的Ruby解释器,但是这个问题特别重要的原因在于它意味着类会相互踩踏。例如,考虑ActiveRecord :: Base,它定义了与某个数据库的连接。这个类的状态在不同的Rails应用程序之间是不同的,因此只要在同一个解释器上运行多个Rails应用程序,就会发生严重的类战。

另一个答案表明Rails是单线程的,但是从Rails 2.2.2开始不一定如此。我会留下这个作为对这个答案的评论,但我是在业力紧身衣:)

答案 2 :(得分:2)

“mod_ruby每个Apache进程使用一个解释器,这意味着应用程序 在名称空间中遍布彼此。至少对于Rails来说,就是这样 不可接受,所以如果你想要mod_ruby,这是每个Apache设置的1个应用程序。“ - David Heinemeier Hansson

现在有人嘲笑它,如果你还想使用它,请查看mod_ruby FAQ

Dreamhost确实试图将ruby纳入他们的托管环境,这可以从他们的博客中了解他们的努力结论。