【问题标题】:Phusion-passenger compiles extension for wrong ruby when using RVMPhusion-passenger 在使用 RVM 时为错误的 ruby​​ 编译扩展
【发布时间】:2011-09-08 11:10:43
【问题描述】:

我已经使用 Ruby 1.9.2 设置了 RVM 系统范围,据我所知,它工作正常。

但是当我尝试通过编译Passenger apache2模块时

passenger-install-apache2-module

它为系统的 1.8.7 编译它(ext/ruby 文件夹包含 ruby-1.8.7-x86_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 在只读文件系统上运行,因此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 具有正确的 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 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:       ""

【问题讨论】:

    标签: ruby rvm passenger


    【解决方案1】:

    需要设置“GEM_HOME”变量。

    将此添加到您的乘客配置文件中(例如:/etc/apache2/mods-enabled/passenger.conf):

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

    当然,用你的实际版本更改这个“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>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,我发现里面的PassengerRuby有问题。谢谢!
      【解决方案3】:

      如果你对不同的item使用不同的ruby-version,你可能只需要native-support,切换到正确的ruby-version后运行passenger-config build-native-support即可。

      使用 passenger-config build-native-support --help 查看该命令将为哪个 ruby​​ 版本构建原生支持。

      【讨论】:

      • 一个很好的提示。不过,由于这只是引入该命令的最新 4.0.42(两天前发布),我不能接受它作为答案。
      • 哇。昨天在 Ubuntu 服务器上遇到了类似的问题,不知道它是 新的。
      【解决方案4】:

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

      在为 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
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          事实证明,显然在安装较新的 Rake gem 时,我的环境错误,虽然 gem 最终在 1.9.2 下的 RVM 中,但它实际上引用了系统 1.8.7 二进制文件,并且该乘客安装脚本运行了这个 rake,它反过来构建了针对错误 ruby​​ 的模块。

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

          【讨论】:

            【解决方案7】:

            您在运行乘客安装之前更换了 Ruby 吗?

            rvm use 1.9.2
            

            您可以通过以下方式检查您当前的 Ruby(和 gemset 等):

            rvm info
            

            【讨论】:

            • 感谢您的建议,但是是的,我已切换 ruby​​。 (而且我运行安装程序时明确命名了 ruby​​ 二进制文件 ...1.9.2-p180/bin/ruby $(which passenger-install-apache2-module) 甚至 rvm 1.9.2 exec passenger.... 以及两者的组合)。我只是想尽办法尝试。
            • 好的,奇怪的是它当时不起作用。查看乘客的 apache 配置会很有用。
            猜你喜欢
            • 2012-01-13
            • 2012-06-26
            • 2022-11-23
            • 2019-08-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-19
            相关资源
            最近更新 更多