8

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

4

3 回答 3

7

已经回答说 mod_ruby 会导致共享 Ruby 解释器,但这特别成问题的原因是它意味着类相互践踏。例如,考虑定义与某个数据库的连接的 ActiveRecord::Base。这个类的状态在不同的 Rails 应用程序之间是不同的,所以一旦在同一个解释器上运行多个 Rails 应用程序,就会发生严重的类冲突。

另一个答案表明 Rails 是单线程的,但在 Rails 2.2.2 中不一定如此。我会将此作为对该答案的评论,但我穿着业力紧身衣:)

于 2009-05-22T02:49:41.890 回答
7

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

此外,它的表现也不是那么好。

如需更深入的讨论,请查看此 Phusion 员工的博客

于 2009-05-21T23:52:35.460 回答
2

“mod_ruby 每个 Apache 进程使用一个解释器,这意味着应用程序在命名空间中相互遍历。至少对于 Rails,这是不可接受的,所以如果你想要 mod_ruby,每个 Apache 设置只有 1 个应用程序。” ——大卫·海涅迈尔·汉森

现在它已经被一些人嘲笑了,如果你仍然想使用它,请查看mod_ruby 常见问题解答

Dreamhost确实尝试将 ruby​​ 包含到他们的托管环境中,这是从他们的博客中关于他们从这项努力中得出的结论。

于 2009-05-22T00:01:50.043 回答