像Ruby和Rails一样受欢迎,似乎这个问题已经解决了。 JRuby和mod_rails都很好用,但为什么不用直接Ruby的Apache mod?
答案 0 :(得分:23)
有Phusion Passenger,一个强大的Apache模块,可以以最少的配置运行Rack个应用程序。它对共享主机越来越有吸引力,将任何程序转换为Rack应用程序都非常容易:
Rack应用程序是Ruby 对象 (不是一个类)响应
call
。 它需要一个参数,即 环境并返回一个数组 完全三个值:状态,即 标题和正文。
答案 1 :(得分:18)
基本问题是:长期以来,MRI是唯一可行的Ruby实现。 MRI存在许多问题,使得很难将其嵌入到另一个应用程序中(这基本上是mod_ruby所做的:它将MRI嵌入到Apache中),尤其是多线程应用程序(Apache是)。它不是特别是线程安全的,它有相当多的全局状态。
这个全局状态意味着,例如,如果一个Rails应用程序修改某个类,那么在同一个Apache服务器上运行的所有其他 Rails应用程序,也看到这个修改过类。
另一个问题是MRI源代码不容易被破解。 MRI已经超过15年了,它已经开始显示了。
由于这些问题,mod_ruby从来没有真正正常工作,并且在某些时候维护者只是放弃了。
另一方面,基于C的PHP解释器从第一天开始设计,在Apache中作为mod_php运行。实际上,对于前几个版本,甚至没有解释器的命令行版本,mod_php是运行PHP的唯一方式。Phusion Passenger (aka mod_rack aka mod_rails)通过基本放弃和回避问题解决了这个问题:他们只是在每个应用程序的单独过程中运行单独的MRI副本。它非常好用,不仅适用于Ruby。它支持WSGI(Python Web框架的标准接口),Rack(Ruby Web Frameworks的标准接口)和对Ruby on Rails的直接支持。
我的希望在于mod_rubinius,遗憾的是它还不存在。 Rubinius从一开始就设计为线程安全,可嵌入,没有全局状态,不使用C堆栈等。它被设计为能够在一个Rubinius进程中运行多个Rubinius VM。这使得mod_rubinius比mod_ruby更容易实现和维护。不幸的是,当然,Rubinius还没有被释放,而且在Rubinius被释放之前,关于mod_rubinius的真正工作甚至无法开始。好消息是mod_rubinius已经拥有比mod_ruby更多的人力资源,因为它已经为Rails托管公司支付开发人员的费用,绝望希望自己使用它。
答案 2 :(得分:5)
或许值得双重澄清mislav的观点,即mod_rails实际上并不局限于Rails代码。新名称mod_rack更好。简单的小应用程序可以放置 - 例如:
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
答案 3 :(得分:4)
有一个:mod_ruby,但它在大约2年内没有得到维护。
答案 4 :(得分:0)