尽管 Ruby 和 Rails 很流行,但这个问题似乎已经得到解决。JRuby 和 mod_rails 都很好而且很漂亮,但是为什么没有一个专门针对 Ruby 的 Apache mod 呢?

有帮助吗?

解决方案

基本问题是这样的:很长一段时间,MRI 是唯一可行的 Ruby 实现。MRI 有许多问题,使其很难将其嵌入到另一个应用程序中(这基本上就是 红宝石模组 做:它在 Apache 中嵌入了 MRI),尤其是多线程(Apache 就是)。它并不是特别线程安全,并且具有相当多的全局状态。

这种全局状态意味着,例如,如果一个 Rails 应用程序修改了某个类,那么 所有其他 在同一 Apache 服务器上运行的 Rails 应用程序将 请参阅这个修改后的类。

另一个问题是 MRI 源代码不容易被破解。MRI 已有 15 年多的历史,并且已经开始显现出它的作用。

由于这些问题,mod_ruby 从未 真的 工作正常,但在某些时候维护者干脆放弃了。

另一方面,基于 C 的 PHP 解释器从第一天起就被设计为在 Apache 中作为 mod_php 运行。事实上,对于前几个版本,甚至没有解释器的命令行版本,mod_php 是 仅有的 运行 PHP 的方式。

Phusion Passenger(又名 mod_rack 又名 mod_rails) 通过基本上放弃和回避问题来解决这个问题:他们只是在每个应用程序的单独进程中运行单独的 MRI 副本。它非常有效,而且不仅仅适用于 Ruby。它支持 WSGI (Python Web 框架的标准接口), 架子 (Ruby Web 框架的标准接口)以及对 Ruby on Rails 的直接支持。

我的希望就在眼前 mod_rubinius, ,不幸的是还不存在。 鲁比纽斯 从一开始就被设计为线程安全、可嵌入、不受全局状态影响、不使用C堆栈等等。它被设计为能够在一个 Rubinius 进程内运行多个 Rubinius 虚拟机。这使得 mod_rubinius 比 mod_ruby 更容易实现和维护。当然,不幸的是,Rubinius 还没有发布,mod_rubinius 的真正工作甚至要等到 Rubinius 发布后才能开始。好消息是 mod_rubinius 背后的人力已经比 mod_ruby 多,因为它已经向 Rails 托管公司支付开发人员费用, 拼命地 自己想用。

其他提示

Phusion 乘客, ,一个强大的 Apache 模块,可以运行 架子 具有最低配置的应用程序。它对共享主机越来越有吸引力,并且将任何程序变成 Rack 应用程序都非常简单:

Rack 应用程序是 Ruby 目的(不是一个类)响应 call。正好需要 一个论点, ,环境并返回一系列的数组 三个值:状态,标头和身体。

也许值得双重澄清米斯拉夫的观点,即 mod_rails 实际上根本不限于 Rails 代码。新名称 mod_rack 更好了。微不足道的小应用程序也可以安装在机架上——它们的例子是:

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
  end
end

有一个: 红宝石模组, ,但已经有大约2年没有维护了。

mod_rails 它可以运行 架子 应用程序,您还需要什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top