Ruby on rails RubyonRails服务器选项
为RubyonRails应用程序设置开发服务器的整个问题让我感到困惑。我确信有WEBrick、Mongrel、Passenger、Apache、Nginx和更多,我不太理解它们扮演的不同角色 我开始使用WEBrick,现在使用Mongrel进行开发。这些服务器是独立的,还是放在Apache前面 我读过关于Passenger的文章,但我真的不明白它是什么,网站上说“让Ruby web应用程序的部署变得轻而易举”,它会取代Mongrel吗?它是否像Capistrano一样也部署web应用程序 请记住,我想测试SSL,我相信mongrel不支持SSL,最好的开发服务器设置是什么 谢谢根据上下文,“部署”一词可以有两种含义。您还混淆了Apache/Nginx的角色与其他组件的角色 历史笔记:本文最初是在2010年11月6日写的,当时Ruby应用服务器生态系统受到限制。我在2013年3月15日更新了这篇文章,其中包含了生态系统中的所有最新更新 免责声明:我是应用服务器之一的Phusion Passenger的作者之一 Apache与Nginx 它们都是网络服务器。它们可以提供静态文件,但通过适当的模块,还可以提供动态web应用程序,例如用PHP编写的应用程序。Apache更受欢迎,有更多的功能,Nginx更小更快,功能更少 Apache和Nginx都不能提供现成的Ruby web应用程序,要做到这一点,您需要将Apache/Nginx与某种附加组件结合使用,稍后将介绍 Apache和Nginx还可以充当反向代理,这意味着它们可以接收传入的HTTP请求并将其转发到另一台服务器,该服务器也会说HTTP。当服务器响应HTTP响应时,Apache/Nginx会将响应转发回客户端;稍后您将了解为什么这是相关的 Mongrel和其他生产应用服务器与WEBrick Mongrel是一个Ruby“应用服务器”:具体来说,这意味着Mongrel是一个应用程序,它:Ruby on rails RubyonRails服务器选项,ruby-on-rails,apache,passenger,mongrel,Ruby On Rails,Apache,Passenger,Mongrel,为RubyonRails应用程序设置开发服务器的整个问题让我感到困惑。我确信有WEBrick、Mongrel、Passenger、Apache、Nginx和更多,我不太理解它们扮演的不同角色 我开始使用WEBrick,现在使用Mongrel进行开发。这些服务器是独立的,还是放在Apache前面 我读过关于Passenger的文章,但我真的不明白它是什么,网站上说“让Ruby web应用程序的部署变得轻而易举”,它会取代Mongrel吗?它是否像Capistrano一样也部署web应用程序 请记住
- 普西翁旅客
- 独角兽
- 稀薄的
- 美洲狮
- 特立尼达(仅适用于JRuby)
- 扭矩箱(仅限JRuby)
- WEBrick不适合制作,不像我前面提到的其他东西。WEBrick完全是用Ruby编写的。Mongrel(和大多数其他Ruby应用服务器)是部分Ruby和部分C(主要是Ruby),但其HTTP解析器是用C编写的,以提高性能
- WEBrick速度较慢,健壮性较差。它有一些已知的内存泄漏和一些已知的HTTP解析问题
- WEBrick通常仅在开发期间用作默认服务器,因为默认情况下WEBrick包含在Ruby中。Mongrel和其他应用服务器需要单独安装。不建议在生产环境中使用WEBrick,尽管出于某种原因Heroku选择WEBrick作为其默认服务器。他们以前使用过Thin,所以我不知道他们为什么改用WEBrick
- 可直接暴露于互联网的应用程序服务器:Phusion乘客、Rainbows
- 可能不会直接暴露于互联网的应用服务器:Mongrel、Unicorn、Thin、Puma。这些应用服务器必须放在Apache和Nginx等反向代理web服务器后面
- 我对特立尼达岛和扭矩箱了解不够,所以我省略了它们
- 某些应用服务器每个进程只能并发处理1个请求。如果你想同时处理2个请求,你需要运行多个appserver实例,每个实例都为同一个Ruby应用服务。这组应用程序服务器进程称为应用程序服务器集群(因此命名为Mongrel集群、瘦集群等)。然后,必须设置Apache或Nginx以将代理服务器反转到此集群。Apache/Nginx将负责在集群中的实例之间分发请求(在“I/O并发模型”一节中详细介绍)
- web服务器可以缓冲请求和响应,从而保护应用服务器不受“慢客户端”(HTTP客户端)的影响,HTTP客户端不能很快发送或接受数据。在等待客户端发送完整请求或接收完整响应时,您不希望应用程序服务器什么也不做,因为在此期间,应用程序服务器可能无法执行任何其他操作。Apache和Nginx非常擅长同时做很多事情,因为它们要么是多线程的,要么是事件的
- 大多数应用服务器都可以提供静态文件,但不是特别擅长。Apache和Nginx可以更快地完成这项工作李>
- 人们通常将Apache/Nginx设置为直接为静态文件提供服务,但将与静态文件不一致的请求转发到应用服务器,这是一种良好的安全实践。Apache和Nginx非常成熟,可以保护应用服务器免受(可能是恶意)损坏的请求