2009-05-21 59 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。我会留下这个作为对这个答案的评论,但我在一个业障紧身衣:)