【问题标题】:Why can't Rails work with mod_ruby?为什么 Rails 不能与 mod_ruby 一起工作?
【发布时间】:2010-10-28 02:27:45
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby mongrel


    【解决方案1】:

    所有运行 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 确实尝试将 ruby​​ 包含到他们的托管环境中,这来自他们的博客,关于他们从这项努力中得出的结论。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-04-29
          • 2015-03-16
          • 1970-01-01
          • 1970-01-01
          • 2021-08-18
          • 2015-10-20
          • 1970-01-01
          • 2021-07-19
          • 2021-03-27
          相关资源
          最近更新 更多