7

我有一个主要运行 Ruby 1.8.7 的服务器,但现在我有一个需要 1.9.3 的 Rails 3.2 应用程序。我安装了Passenger 4,因为它支持在每个虚拟服务器上运行多个Ruby。

但是,虽然您可以分配特定的 Ruby,但应用程序似乎无权访问该 Ruby 的 gemset。因此,我的虚拟服务器配置了 1.9.3 Ruby,正如我的应用程序现在给出的错误页面上所确认的那样:

Ruby interpreter command
/home/aaron/.rvm/rubies/ruby-1.9.3-p0/bin/ruby

但是 GEM_HOME 参数讲述了一个不同的故事:

GEM_HOME = /home/aaron/.rvm/gems/ruby-1.8.7-p352

查看Passenger 4 的配置指令,我发现无法指定不同的gemset。我错过了什么,还是这件事还没有准备好迎接黄金时段?

4

2 回答 2

23

从您的 gemset 目录运行:

   $ passenger-config --ruby-command

它会告诉你 Apache 和 Nginx 的 ruby​​ 路径。

  Command: /home/deric/.rvm/wrappers/ruby-2.0.0-p247@my_gemset/ruby
  Version: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
  To use in Apache: PassengerRuby /home/deric/.rvm/wrappers/ruby-2.0.0-p247@my_gemset/ruby
  To use in Nginx : passenger_ruby /home/deric/.rvm/wrappers/ruby-2.0.0-p247@my_gemset/ruby

Nginx:对于Passenger 4,您可以指定多个ruby 版本。所以对于特定的服务器配置:

your_site.conf:

server {
   listen 80;
   root /home/aaron/web/public;
   passenger_enabled on;
   passenger_ruby /home/aaron/.rvm/wrappers/ruby-2.0.0-p247@your_gemset/ruby;
}

nginx.conf:(这适用于新乘客 4.0.17)

http {

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;

}

只需从您的 gemset 目录运行:

   $ passenger-status

它将检查是否passenger_native_support.so可用。根据您的 RVM 安装,您可能需要使用rvmsudo

   $ rvmsudo passenger-status

对于 Debian/Ubuntu,现在有 nginx 和乘客的二进制包可用,这使得安装更加容易。

于 2013-09-13T09:33:20.107 回答
7

正如Tombart指出的那样:如果您使用预编译的 Passenger 模块(在我的例子中是 Apache2),您最终会得到一个系统启动并运行。

但是,如果使用RVM ,我偶然发现您需要使用“包装器目录”来选择正确的 RVM ruby​​ 版本和 gemet,就像在您的 Apache vhost 配置中一样:

PassengerRuby /home/of_your_ruby_user/.rvm/wrappers/ruby-x.y.z-p123@gemset/ruby

这样,Passenger 就知道如何找到相对于该目录 ( ../../gems/ruby-x.y.z-p123@gemset/gems) 的正确 gemset。否则,Passenger 会使用“标准 ruby​​ gemset”,如果您想使用相同的 ruby​​ 版本运行多个应用程序,这很奇怪。我只能猜测这与 Nginx 类似。

于 2013-10-23T07:54:52.050 回答