我已经使用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: ""
答案 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