请升级到Ruby 1.9.3或更高版本以继续

时间:2014-09-15 19:23:19

标签: ruby-on-rails ruby nginx passenger

当我在生产中导航到我的Rails应用程序时出现此错误:

Rails 4 prefers to run on Ruby 2.0.

You're running
  ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

Please upgrade to Ruby 1.9.3 or newer to continue.

当我在终端中输入ruby -v时,我得到:

ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]

当我输入rvm list时:

rvm rubies

 * ruby-1.9.3-p547 [ x86_64 ]
=> ruby-2.0.0-p481 [ x86_64 ]

4 个答案:

答案 0 :(得分:2)

您可以使用以下命令告诉RVM临时使用特定的Ruby:

rvm use 2.0.0

选择的Ruby不会在启动命令行会话之间被记住,因为这并不能告诉RVM将该版本用作默认版本。添加--default,它将:

rvm use 2.0.0 --default

来自内置帮助:

To set a ruby as the user default, use the --default option.

    $ rvm use 1.9.3 --default

Please see documentation for further information:

  https://rvm.io/rvm/basics

当我运行rvm list时,会显示一些您似乎忽略的重要信息:

rvm list

rvm rubies

   ruby-1.9.3-p547 [ x86_64 ]
=* ruby-2.1.2 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

注意图例显示哪个是当前和默认的Ruby。与你的相比。

另外,请注意您:

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

这是系统中安装的Ruby版本。您运行Rails会话的用户和的用户都安装并初始化了RVM,或者以某种方式告诉RVM切换到系统Ruby。

此外,您可能在该目录中有一个RVM指令,因此请阅读" rvmrc files"和" Typical RVM Project Workflow"看看是否有可能影响你的事情。

答案 1 :(得分:1)

这是我个人的观点:避免在生产中使用RMV。在CentOS和其他Linux发行版上都有一个名为 alternative 的工具。

ruby_setup.sh

#/bin/sh
if [ "$RUBY_VERSION" == '2.0.0' ]; then
  yum -y install ruby20 rubygems20 ruby-devel
  alternatives --set ruby /usr/bin/ruby2.0
elif [ "$RUBY_VERSION" == '1.9.3' ]; then
  yum -y install ruby19 rubygems19 ruby19-devel
  alternatives --set ruby /usr/bin/ruby1.9
elif [ "$RUBY_VERSION" == '1.8.7' ]; then
  yum -y install ruby18 rubygems18 ruby18-devel
  alternatives --set ruby /usr/bin/ruby1.8
else
  exit 1
fi

gem install bundler --no-ri --no-rdoc

RUBY_VERSION=2.0.0 ruby_setup.sh

答案 2 :(得分:1)

Phusion Passenger作者在这里。像rvm use这样的RVM命令对您的问题完全没有影响。这是因为Phusion Passenger用来运行你的应用程序的Ruby解释器不是使用rvm命令从shell控制的,而只是通过使用passenger_ruby配置选项来控制。 / p>

为什么会这样?因为通过在shell中设置环境变量来实现RVM(以及rbenv和chruby,以及其他任何其他内容)。但是作为explained in the Phusion Passenger manual,环境变量不是系统范围的:它们是基于每个进程继承的。因此,您在bash中设置的任何环境变量只会影响bash及其子进程,而不会影响Nginx。因为后者是由init系统启动的。

passenger_ruby配置选项是 选项,用于控制Phusion Passenger使用哪个Ruby解释器来运行您的应用。

答案 3 :(得分:0)

您可以使用此命令:

rvm use ruby-2.0.0p481

如果这不起作用,请首先尝试此命令:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # This loads RVM 

请参阅此类似问题:“How do I change my Ruby version using RVM?”和此documentation