ruby-on-rails – 为什么Apache还没有可行的mod_ruby?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 为什么Apache还没有可行的mod_ruby?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby和Rails一样受欢迎,似乎这个问题已经解决了. JRuby和mod_rails都很好,很漂亮,但为什么Apache mod只是直接的Ruby?

解决方法

基本的问题是:长久以来,MRI是唯一可行的Ruby实现. MRI具有许多问题,难以将其嵌入到另一个应用程序中(这基本上是 mod_ruby所做的:将其嵌入到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 Frameworks的标准接口),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托管公司付出了开发人员的费用,Rails托管公司很想自己使用它.

猜你在找的Ruby相关文章