Ruby on rails RubyonRails服务器选项

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应用程序 请记住

为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应用程序
  • 设置TCP套接字,允许它与外部世界(如Internet)通信。 Mongrel在此套接字上侦听HTTP请求,并将请求数据传递给Ruby web应用程序
  • RubyWeb应用程序然后返回一个对象,该对象描述HTTP响应的外观,Mongrel负责将其转换为实际的HTTP响应(实际字节),并通过套接字将其发送回
  • 然而,杂种狗是相当陈旧的,现在它已不再维持。较新的替代应用程序服务器包括:

    • 普西翁旅客
    • 独角兽
    • 稀薄的
    • 美洲狮
    • 特立尼达(仅适用于JRuby)
    • 扭矩箱(仅限JRuby)
    稍后我将介绍它们,并描述它们之间以及与杂种的区别

    WEBrick与Mongrel的做法相同,但区别在于:

    • WEBrick不适合制作,不像我前面提到的其他东西。WEBrick完全是用Ruby编写的。Mongrel(和大多数其他Ruby应用服务器)是部分Ruby和部分C(主要是Ruby),但其HTTP解析器是用C编写的,以提高性能
    • WEBrick速度较慢,健壮性较差。它有一些已知的内存泄漏和一些已知的HTTP解析问题
    • WEBrick通常仅在开发期间用作默认服务器,因为默认情况下WEBrick包含在Ruby中。Mongrel和其他应用服务器需要单独安装。不建议在生产环境中使用WEBrick,尽管出于某种原因Heroku选择WEBrick作为其默认服务器。他们以前使用过Thin,所以我不知道他们为什么改用WEBrick
    应用服务器与世界 所有当前的Ruby应用服务器都使用HTTP,但是一些应用服务器可能会在端口80上直接暴露于Internet,而其他应用服务器可能不会

    • 可直接暴露于互联网的应用程序服务器: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非常成熟,可以保护应用服务器免受(可能是恶意)损坏的请求
    为什么某些应用程序服务器