当使用RVM时,Phusion passenger为错误的ruby编译扩展

当使用RVM时,Phusion passenger为错误的ruby编译扩展,ruby,rvm,passenger,Ruby,Rvm,Passenger,我已经用Ruby 1.9.2设置了RVM系统范围,据我所知,它运行良好 但是当我试图通过 passenger-install-apache2-module 它为系统的1.8.7(ext/ruby文件夹包含ruby-1.8.7-x86\u 64-linux)编译,当我启动apache时,乘客抱怨: *** Phusion Passenger: no passenger_native_support.so found for the current Ruby interpreter. Compil

我已经用Ruby 1.9.2设置了RVM系统范围,据我所知,它运行良好

但是当我试图通过

passenger-install-apache2-module
它为系统的1.8.7(ext/ruby文件夹包含
ruby-1.8.7-x86\u 64-linux
)编译,当我启动apache时,乘客抱怨:

*** Phusion Passenger: no passenger_native_support.so found for the current Ruby interpreter. Compiling one...
# mkdir -p /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7/ext/ruby/ruby-1.9.2-x86_64-linux
但问题是Apache运行在只读文件系统上,因此乘客无法在运行时编译模块。我需要做什么才能让它预先编译成Ruby 1.9.2

我甚至删除了原始的
/usr/bin/ruby18
二进制文件,然后它以错误结尾:

Compiling and installing Apache 2 module...
cd /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7
/usr/local/rvm/wrappers/ruby-1.9.2-p180/rake apache2:clean apache2 RELEASE=yes
# /usr/local/rvm/wrappers/ruby-1.9.2-p180/rake apache2:clean apache2 RELEASE=yes
/usr/bin/env: ruby18: No such file or directory
另外,我在这里读到的类似问题很少,但似乎没有一个是直接适用的。文件
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/passenger-install-apache2-module
具有正确的she bang行,用于
…1.9.2-p180/bin/ruby

编辑:添加了更多信息

Apache乘客配置文件是:

LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7
PassengerRuby /usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby
PassengerLogLevel 3
PassengerDebugLogFile /tmp/passenger.log
为了以防万一,我发布了
rvm信息
输出

ruby-1.9.2-p180:

  system:
    uname:       "Linux aevastaja 2.6.31-gentoo-r6 #2 SMP Wed Jan 6 19:40:30 EET 2010 x86_64 GNU/Linux"
    bash:        "/bin/bash => GNU bash, version 4.1.9(2)-release (x86_64-pc-linux-gnu)"
    zsh:         " => not installed"

  rvm:
    version:      "rvm 1.6.18 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.2p180"
    date:         "2011-02-18"
    platform:     "x86_64-linux"
    patchlevel:   "2011-02-18 revision 30909"
    full_version: "ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]"

  homes:
    gem:          "/usr/local/rvm/gems/ruby-1.9.2-p180"
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.2-p180"

  binaries:
    ruby:         "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby"
    irb:          "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/irb"
    gem:          "/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/gem"
    rake:         "/usr/local/rvm/gems/ruby-1.9.2-p180/bin/rake"

  environment:
    PATH:         "/usr/local/rvm/gems/ruby-1.9.2-p180/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin:/usr/local/rvm/rubies/ruby-1.9.2-p180/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.4.5"
    GEM_HOME:     "/usr/local/rvm/gems/ruby-1.9.2-p180"
    GEM_PATH:     "/usr/local/rvm/gems/ruby-1.9.2-p180:/usr/local/rvm/gems/ruby-1.9.2-p180@global"
    MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-1.9.2-p180"
    IRBRC:        "/usr/local/rvm/rubies/ruby-1.9.2-p180/.irbrc"
    RUBYOPT:      ""
    gemset:       ""

在运行乘客安装之前,您是否切换了Ruby

rvm use 1.9.2
您可以使用以下工具检查当前的Ruby(和gemset等):


很明显,在安装较新的Rake gem时,我的环境是错误的,尽管gem最终在1.9.2版本下的RVM中出现,但它实际上引用了system 1.8.7二进制文件,并且Passenger安装脚本运行了这个Rake,这反过来又针对错误的ruby构建了模块


帮助卸载和重新安装Rake gem。

我通常在
global
gemset下安装Passenger,然后为它创建一个包装器。下面显示了每一步。

我知道派对迟到了几年,但以下是为我解决的问题:

在为Ruby 1.8.7和2.0.0运行passenger-install-apache2-module之后,我得到了passenger\u native\u支持。因此:

/usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-4.0.5/libout/ruby/ruby-1.8.7-x86_64-linux/passenger_native_support.so
/usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/libout/ruby/ruby-2.0.0-x86_64-linux/passenger_native_support.so
我将PassengerDefaultRuby设置为2.0.0包装,对于特定的虚拟主机,将PassengerRuby设置为1.8.7包装。1.8.7应用程序无法启动,因为乘客不知道在哪里查找1.8.7版本的乘客本地支持,因此没有编写新版本的写入权限

有两个选项可以解决此问题:1)使用PASSENGER_NATIVE_SUPPORT_OUTPUT_DIR设置一个新目录,该目录具有写入权限;2)将1.8.7输出目录符号链接到2.0.0输出目录,例如

$ ls -l /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/libout/ruby
  ruby-1.8.7-x86_64-linux -> /usr/local/rvm/gems/ruby-1.8.7-p371/gems/passenger-4.0.5/libout/ruby/ruby-1.8.7-x86_64-linux
  ruby-2.0.0-x86_64-linux

如果您对不同的ITE使用不同的ruby版本,您可能只需要本机支持,在切换到正确的ruby版本后,可以运行
passenger config build native support


使用
乘客配置构建本机支持--help
查看命令将为哪个ruby版本构建本机支持。

对于存在此问题的其他人,请注意乘客可能从配置文件(例如,
/etc/httpd/conf.d/passenger.conf
)中获取线索除了主Apache配置文件之外。

将需要设置“GEM_HOME”变量

将其添加到乘客配置文件(例如:
/etc/apache2/mods enabled/passenger.conf
):

当然,用您的实际版本更改这个“ruby-2.3.1”


一个更广泛的例子:

<IfModule mod_passenger.c>
  SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/passenger_free_ruby
</IfModule>

SetEnv GEM_HOME/usr/local/rvm/gems/ruby-2.3.1
PassengerRoot/usr/lib/ruby/vendor\u ruby/phusion\u passenger/locations.ini
PassengerDefaultRuby/usr/bin/passenger\u free\u ruby

谢谢你的建议,不过是的,我换了ruby。(我已经使用显式命名ruby binary
…1.9.2-p180/bin/ruby$(which passenger-install-apache2-module)
甚至
rvm 1.9.2 exec passenger…
以及两者的组合来运行安装程序)。我已经没有办法尝试了。好吧,奇怪的是,它当时不起作用。如果您能为passenger查看apache配置,将非常有用。这是一个很好的提示。尽管如此,由于这只是引入该命令的最新4.0.42(两天前发布),我不能接受这个答案。哇。昨天Ubuntu服务器上出现了类似的问题,我不知道它是新的。是的,我发现里面的Passengeruby是错的。谢谢
SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1
<IfModule mod_passenger.c>
  SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /usr/bin/passenger_free_ruby
</IfModule>