当使用RVM时,Phusion passenger为错误的ruby编译扩展
我已经用Ruby 1.9.2设置了RVM系统范围,据我所知,它运行良好 但是当我试图通过当使用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
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>