像Ruby和Rails一样流行,似乎这个问题已经解决了。 JRuby和mod_rails都很好,并且很棒,但为什么没有Apache Mod直接用于Ruby呢?为什么Apache没有可行的mod_ruby呢?
回答
基本问题是这样的:很长一段时间,MRI是唯一可行的Ruby实现。 MRI有一些问题,很难将其嵌入到另一个应用程序中(这基本上是mod_ruby所做的:它在Apache中嵌入了MRI),尤其是多线程(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框架的标准接口)和直接支持Ruby on Rails。
我的希望在于mod_rubinius,遗憾的是它还不存在。 Rubinius的设计从一开始就是线程安全的,可嵌入的,没有全局状态,不使用C栈等等。它旨在能够在一个Rubinius流程内运行多个Rubinius虚拟机。这使得mod_rubinius比mod_ruby更容易实现和维护。不幸的是,Rubinius目前还没有发布,并且在Rubinius发布之前,mod_rubinius上的真正工作甚至还没有开始。好消息是mod_rubinius已经比mod_ruby拥有更多的人力资源,因为它支付了Rails托管公司的开发者付出的代价,绝望地想要自己使用它。
有一个:mod_ruby,但它在2年左右没有维持。
Phusion Passenger是一个强大的Apache模块,可以使用最低配置运行Rack应用程序。这已经成为吸引共享主机,并打开任何程序到机架上的应用是非常的简单:
机架应用是红宝石对象 (不是类),响应
call
。 ,也恰恰是一个参数,在 环境和返回 正好三个值数组:状态中, 头和身体。
这可能值得双重澄清mislav的观点,mod_rails实际上并不限于Rails代码。新名称mod_rack更好。平凡的小应用程序可以是机架式 - 他们的例子是:
class HelloWorld
def call(env)
[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
end
end
- 1. Ruby on Apache with mod_ruby
- 2. 没有TIME_WAIT连接,为什么呢?
- 3. 为什么不能使用mod_ruby工作?
- 4. mod_ruby在Apache:非常慢
- 5. Python中没有多行Lambda:为什么不呢?
- 6. 有没有什么方法可以缩短这个代码呢?
- 7. mod_wsgi + apache没有多线程,为什么?
- 8. 为什么Apache mod_rewrite没有像预期的那样运行
- 9. 为什么apache的虚拟服务器没有运行
- 10. 为什么Pylint说numpy.random没有'普通'成员,因为它呢?
- 11. 为什么key = model_instance.key有没有!在db到ndb docs旁边呢?
- 12. iOS上的可加载包,有没有什么办法可以实现呢?
- 13. 对话框没有完成关闭,为什么不呢?
- 14. 页面标题没有出现,为什么不呢?
- 15. 抑制“没有什么可为'所有'”
- 16. SVN和Apache - 有没有什么优势?
- 17. 为什么这个git rebase认为没有什么可做的?
- 18. 为什么我的jQuery没有运行?
- 19. 为什么我的ActionFilters没有运行?
- 20. jquery ui有什么用途?为什么不使用jquery呢?
- 21. 什么? ...:...呢?
- 22. 为什么我的Arduino上没有可用的串行数据?
- 23. 为什么有些Winapp没有C++可再发行组件包?
- 24. 为什么不是别的块呢?
- 25. 为什么后面的html页面中的背景颜色没有改变呢?
- 26. 有关CSV扩展,有什么用呢
- 27. 为什么没有运行httphandler
- 28. 为什么事件没有执行?
- 29. 为什么setup.py通常没有shebang行?
- 30. 为什么没有执行回调? - Smalltalk