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

Sas*_*gov 8 ruby mongrel ruby-on-rails

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

Sam*_*Sam 7

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

而且,它并没有那么好.

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


Pet*_*per 7

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

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