如果这听起来像一个愚蠢的问题,我很抱歉,因为它似乎是那些“不废话”的事情之一,但有人可以向我解释为什么 Rails 需要它自己的服务器(Mongrel、WEBrick、mod_rails 等)并且不能t 简单地使用 mod_ruby?
3 回答
已经回答说 mod_ruby 会导致共享 Ruby 解释器,但这特别成问题的原因是它意味着类相互践踏。例如,考虑定义与某个数据库的连接的 ActiveRecord::Base。这个类的状态在不同的 Rails 应用程序之间是不同的,所以一旦在同一个解释器上运行多个 Rails 应用程序,就会发生严重的类冲突。
另一个答案表明 Rails 是单线程的,但在 Rails 2.2.2 中不一定如此。我会将此作为对该答案的评论,但我穿着业力紧身衣:)
所有运行 mod_ruby 的 apache 实例共享一个 Ruby 解释器。这意味着它根本不能在共享主机上使用,或者在每台机器运行多个 Rails 应用程序的任何环境中使用。可能可以在一台机器上运行同一应用程序的多个副本,但您也可能很容易遇到难以追踪的错误。因为 rails 是单线程的,所以每台机器只运行一个 ruby 进程是不可想象的。
此外,它的表现也不是那么好。
如需更深入的讨论,请查看此 Phusion 员工的博客
“mod_ruby 每个 Apache 进程使用一个解释器,这意味着应用程序在命名空间中相互遍历。至少对于 Rails,这是不可接受的,所以如果你想要 mod_ruby,每个 Apache 设置只有 1 个应用程序。” ——大卫·海涅迈尔·汉森
现在它已经被一些人嘲笑了,如果你仍然想使用它,请查看mod_ruby 常见问题解答
Dreamhost确实尝试将 ruby 包含到他们的托管环境中,这是从他们的博客中关于他们从这项努力中得出的结论。