乘客独立,不需要HTTP服务器?

Pra*_*oya 7 apache passenger

使用Passenger Standalone(由Nginx核心驱动)是否意味着我们根本不需要面向Apache或Nginx等HTTP服务器的Web?

Sco*_*son 14

简短的回答是"是",确实是如何运作的.基本上乘客独立允许您通过运行应用程序passenger start,并在后台使用nginx来实际提供rails请求.

但是,运行乘客独立作为唯一的网络服务器存在一个大问题.如果您想运行多个基于ruby的网站,则必须在不同的端口上运行它们,因为没有办法将请求单独代理到单独的乘客.

在我的环境中,我需要使用多个不同版本的ruby运行多个站点(不仅仅是不同版本的rails).例如,我有一个站点运行Rails 2.3.x与Ruby Enterprise Edition,另一个站点运行Rails 3.0.x运行Ruby 1.9.2.我使用独立的乘客和单独的Nginx代理来解决这个问题:

  • 每个网站都运行独立的乘客,我已将其配置为在本地UNIX套接字上侦听.我使用RVM负责为我加载我的ruby版本,所以我的passenger start命令有点冗长,但它看起来像这样:

    • cd /path/to/my/app; rvm use ree-1.8.7-2011.03@gemset; export GEM_HOME=/usr/local/rvm/gems/ree-1.8.7-2011.03@gemset; /usr/local/rvm/gems/ree-1.8.7-2011.03@gemset/bin/passenger start -d -S /tmp/mysite.com.sock -e production --pid-file /path/to/my/app/shared/pids/passenger.pid
  • 现在我的应用程序正在运行并正在侦听/tmp/mysite.com.sock,我有另一个在端口80上运行的Nginx实例,它只使用简单的proxy_pass规则来单独向每个站点发送请求.

很抱歉很长的帖子,也许它有点太多的信息.​​..但我发现这个组合工作得很好,我已经写了一些不错的init.d样式脚本来启动我的个人乘客独立应用程序.Nginx的内存使用率非常低,以至于运行它的3个实例并不需要花费任何费用(每个站点1个,端口80个1个).

希望这可以帮助!