当我在生产中导航到我的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 ]
答案 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。