乘客4与PassengerRuby和不同的宝石集

时间:2013-03-23 02:32:46

标签: ruby-on-rails apache passenger

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

但是,看起来虽然您可以分配特定的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的方法。我错过了什么,或者这件事还没有准备好迎接黄金时段?

2 个答案:

答案 0 :(得分:23)

从你的gemset dir run:

   $ 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,现在有binary packages of nginx and passenger available,这使安装变得更加容易。

答案 1 :(得分:7)

正如Tombart指出:如果你使用precompiled Passenger modules(在我的情况下是针对Apache2),你最终会启动并运行一个系统。

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

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类似。