【问题标题】:Passenger 4 with PassengerRuby and different gem set带有PassengerRuby和不同宝石套装的Passenger 4
【发布时间】:2013-03-23 02:32:46
【问题描述】:

我有一个主要运行 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。是我遗漏了什么,还是这个东西还没有准备好迎接黄金时段?

【问题讨论】:

  • 您是否使用 capistrano 进行部署?默认情况下,它会在本地安装 gems,从而完全绕过 GEM_HOME 中指定的路径。如果不是一个完整的解决方案,可能是一个可行的解决方法。
  • 我将我的应用程序设置为通过 Capistrano 工作,但这不起作用。原来用Ruby 1.8.7 安装Passenger 4 是问题所在。当我在 1.9.3 下运行乘客 4 时,它工作正常。但这是不行的。 :-(

标签: ruby-on-rails apache passenger


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如Tombart 指出的那样:如果您使用precompiled Passenger modules(在我的情况下用于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 来说是类似的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多