【问题标题】:Rails deployment, bundle exec rails s vs Nginx and PassengerRails 部署,捆绑 exec rails s vs Nginx 和 Passenger
【发布时间】:2025-12-10 16:30:02
【问题描述】:

我最近将一个 Rails 应用程序部署到 AWS 上的一个 ec2 实例。这是我第一次进行这样的部署。

我正在阅读,大多数消息来源似乎都建议使用 Nginx 和Passenger 部署rails。

现在我运行 bundle exec rails s -p 80 -b 0.0.0.0,当我转到我的 ec2 网址时,我的应用程序运行良好。

我想知道使用 Nginx 和Passenger 运行bundle exec rails s -p 80 -b 0.0.0.0 VS 有什么好处和坏处?

【问题讨论】:

  • 性能。当您运行rails s 时,它将默认为开发环境,当您是在开发时测试应用程序的单个用户时,这很好。 Rails 具有合理的默认值,可在生产环境中支持大量并发用户。例如预编译资产并让网络服务器做它擅长的事情:提供静态资产。

标签: ruby-on-rails amazon-web-services nginx amazon-ec2 passenger


【解决方案1】:

在生产环境中使用NGINXPassengerrails s 相比有很多优势。

如果您使用标准的WEBrick::HTTPServer 为您rails s,您会注意到性能提高,因为NGINX 和Passenger 已针对此类事物进行了高度优化。

NGINX 提供了几个配置文件,您可以在其中控制虚拟主机并将其用作反向代理服务器 (http://nginx.org/en/docs/beginners_guide.html)。它在服务静态资产方面非常快。如前所述——它提供了几个选项(负载平衡、gzip 选项、SSL 和非安全服务器块设置、缓存、代理请求)。

将 NGINX 与Passenger 一起使用非常高效,因为您可以在NGINX 配置中包含Passenger,以使用Passenger 所需的一组选项自动启动您的服务器。乘客提供了几种您可以使用的配置,例如,您可以拥有的应用程序和 RAM 限制的最大/最小分叉进程/线程数量。访问https://www.phusionpassenger.com/library/config/nginx/reference/ 获取所有这些列表。它还可以在崩溃时重新启动您的应用程序,这也是一个很大的好处。

【讨论】:

    【解决方案2】:
    1. Nginx 和乘客将有助于负载平衡,在这种情况下,您可以向服务器请求更多的乘客。
    2. 如果乘客死亡,nginx 将启动新乘客。
    3. 对于部署 nginx 和乘客是很好的方式,使用 'rails s' 和端口号启动服务器对于开发而不是部署有好处。
      1. Https 和其他更多选项可用于 nginx。
      2. Web 服务器和应用程序服务器是很好的部署组合。

    【讨论】: