2013-03-19 30 views
1

我在我的服务器上部署我的rails应用程序时遇到问题。我使用Passenger来部署页面。启动服务器时,我的页面上列出了以下错误。这似乎是我已经安装的乘客版本引用红宝石1.8.7,但我的应用程序已建成在2.0.0。我已经尝试删除红宝石1.8.7并重新安装乘客,但目前为止没有运气。如果我从我的目录运行ruby -v,它会将版本列为2.0.0。Passenger('Bundler:RubyVersionMismatch')

Your Ruby version is 1.8.7, but your Gemfile specified 2.0.0 (Bundler::RubyVersionMismatch) 
/home/ubuntu/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/definition.rb:361:in ` validate_ruby!' 
/home/ubuntu/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler.rb:116:in `setup' 
/home/ubuntu/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/setup.rb:17 
/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:59:in `gem_original_require' 
/usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:59:in `require' 
/var/lib/gems/1.8/gems/passenger- 4.0.0.rc4/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code' 
/var/lib/gems/1.8/gems/passenger-4.0.0.rc4/helper-scripts/rack-preloader.rb:73:in `preload_app' 
/var/lib/gems/1.8/gems/passenger-4.0.0.rc4/helper-scripts/rack-preloader.rb:127 

我的apache2.conf文件有以下补充:

Include sites-enabled/ 
<ifmodule mod_ssl.c> 
    NameVirtualHost *:443 
</ifmodule> 
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 4.0.0.rc4/libout/apache2/mod_passenger.so 
    PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.0.rc4 
    PassengerRuby /usr/bin/ruby1.8 

编辑:ANSWER

我用sudo来安装乘客和Apache2的模块。应该只是键入:

gem install passenger -pre 
passenger-install-apache2-module 

没有sudo。

+0

尝试在你的Gemfile所在的同一目录下执行'bundle update'。 – fmendez 2013-03-19 02:28:58

+0

谢谢fmendez,我已经尝试过,但仍然没有运气。 – user1835358 2013-03-19 02:52:58

回答

0

您应该尝试再次安装乘客。

+0

谢谢,开发。我试过这个..但仍然有问题。 – user1835358 2013-03-19 02:52:23

+0

你能指定问题吗?我面临同样的问题,以前我有乘客,我升级到2.0后,我用红宝石1.9.3安装,我面临的问题。然后我使用ruby 2.0安装乘客,然后将乘客配置添加到apache,然后运行。如果你在你的服务器上托管很多ruby版本,或者你正在托管一些仍然依赖于ruby 1.8.7或ruby 1.9.3的rails应用程序,那么你应该更加小心,因为我不太确定你可以运行许多乘客的实例(基于不同的红宝石版本)在同一时间。 – 2013-03-19 03:08:37

+0

我的服务器只运行这个程序。我不需要任何使用1.8.7解释的东西,那只是安装的原始版本。我已经使用rvm卸载了1.8,这很奇怪,因为当我重新安装乘客时,它似乎想要使用来自ruby 1.8的宝石。我对使用乘客的多个版本不感兴趣,只希望版本与2.0.0兼容。 – user1835358 2013-03-19 03:33:38

2

您的乘客配置指向红宝石1.8

LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 4.0.0.rc4/libout/apache2/mod_passenger.so 
PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.0.rc4 
PassengerRuby /usr/bin/ruby1.8 

它可能应该是这个样子......

LoadModule passenger_module /var/lib/gems/2.0.0/gems/passenger 4.0.0.rc4/libout/apache2/mod_passenger.so 
PassengerRoot /var/lib/gems/2.0.0/gems/passenger-4.0.0.rc4 
PassengerRuby /usr/bin/ruby2.0.0 

乘客的安装是非常有益的,它打印这些行你上控制台成功安装后。你应该复制这些行并将它们粘贴到你的apache conf中

+0

是的,我只是想出了这一点。我认为你是对的..但这里是奇怪的事情:在/ var/lib/gems中唯一可用的版本是1.8。但是在/ usr/local/rvm/gems/ruby​​ 2.0.0中存在。我可以使用该路径,但/usr/local/rvm/gems/ruby-2.0.0-p0/gems/passenger-3.0.19/ext/apache2/不包含mod_passenger.so ...它只有mod- passenger.c ...所以它似乎需要在这里运行乘客安装apache2模块步骤..但是当我运行这个我只是得到相同的旧的加载模块。有任何想法吗? – user1835358 2013-03-19 05:42:57

+0

检查您的ruby 2.0安装中的bin文件夹,以获取passenger-install-apache2-module可执行文件。运行它。如果它不存在,那么使用安装在ruby 2.0上的rubygem安装乘客gem。如果路径导致您的问题,请使用绝对路径 – Litmus 2013-03-19 06:05:46

+0

感谢您的帮助。我使用sudo安装模块时犯了一个愚蠢的错误。现在已经修复了。 – user1835358 2013-03-19 06:32:25

1

这就是为什么我从使用RVM切换到RBENV。 RBENV不会遇到这个问题。加上它的只是better

如果您在生产服务器上使用RVM升级红宝石,那么您将被迫重新安装乘客/ nginx(在您的情况下,它看起来就像是乘客)。

巨大的痛苦,并导致服务器宕机。

使用RBENV来代替自己来解决这个问题。通过RBENV/Capistrano,升级可以简单地通过你的gemfile来完成,其余部分正常工作。