Phusion-passenger在使用RVM时编译错误ruby的扩展

时间:2011-06-04 17:45:36

标签: ruby rvm passenger

我已经使用Ruby 1.9.2在系统范围内设置了RVM,据我所知,它运行正常。

但是当我尝试通过

编译Passenger apache2模块时
passenger-install-apache2-module

它为系统的1.8.7(ext/ruby文件夹包含ruby-1.8.7-x86_64-linux)编译它,当我启动apache时,Passenger抱怨:

*** 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在只读文件系统上运行,因此Passenger无法在运行时编译模块。我需要做些什么来事先为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

PS。我在这里读过几个类似的问题,但似乎没有一个直接适用。文件/usr/local/rvm/gems/ruby-1.9.2-p180/bin/passenger-install-apache2-module具有...1.9.2-p180/bin/ruby正确的she-bang行。

编辑:添加了更多信息

Apache Passenger conf是:

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 info输出。

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:       ""

7 个答案:

答案 0 :(得分:7)

如果你为不同的ites使用不同的ruby-version,你可能只需要本机支持,并且可以在切换到正确的ruby-version之后运行passenger-config build-native-support

使用passenger-config build-native-support --help查看该命令将构建本机支持的ruby版本。

答案 1 :(得分:2)

对于遇到此问题的其他人,请注意Passenger可能会从主Apache配置文件以外的配置文件(例如/etc/httpd/conf.d/passenger.conf)中获取提示。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我知道,这次聚会已经很晚了,但这就是为我解决的问题:

在为Ruby 1.8.7和2.0.0运行了passenger-install-apache2-module之后,我最终得到了passenger_native_support.so:

/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应用程序无法启动,因为Passenger不知道在哪里查找搭载1.8.7版本的passenger_native_support.so并且没有写入权限来编译新的。

解决此问题的两个选项: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

答案 4 :(得分:0)

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

rvm use 1.9.2

您可以使用以下命令检查当前的Ruby(和gemset等)。

rvm info

答案 5 :(得分:0)

事实证明,显然在安装较新的Rake gem时,我遇到了环境错误,虽然gem在1.9.2下的RVM中结束,但它实际上引用了系统1.8.7二进制文件并且Passenger安装脚本运行了这个rake,反过来构建模块以防止错误的红宝石。

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

答案 6 :(得分:0)

需要设置“ GEM_HOME ”变量。

将此添加到您的乘客配置文件(例如:JsonRequestBehavior.AllowGet):

/etc/apache2/mods-enabled/passenger.conf

当然,请将此“ ruby​​-2.3.1 ”更改为您的实际版本。

更广泛的例子:

SetEnv GEM_HOME /usr/local/rvm/gems/ruby-2.3.1