【问题标题】:Please upgrade to Ruby 1.9.3 or newer to continue请升级到 Ruby 1.9.3 或更高版本以继续
【发布时间】:2014-09-16 18:01:15
【问题描述】:

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

【问题讨论】:

  • 您是如何部署到生产环境的?
  • 还有ruby -v在生产机器上说什么?
  • @kdeisz ruby​​ -v 说 ruby​​ 2.0.0p481(2014-05-08 修订版 45883)[x86_64-linux]
  • @jsort 我使用 git deploy gem 部署
  • 不应将 RVM/Rbenv 部署到生产服务器。

标签: ruby-on-rails ruby nginx passenger


【解决方案1】:

您可以通过以下方式告诉 RVM 临时使用特定的 Ruby:

rvm use 2.0.0

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

rvm use 2.0.0 --default

来自内置帮助:

要将 ruby​​ 设置为用户默认值,请使用 --default 选项。 $ rvm 使用 1.9.3 --default 请参阅文档以获取更多信息: https://rvm.io/rvm/basics

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

rvm 列表 rvm 红宝石 ruby-1.9.3-p547 [x86_64] =* ruby​​-2.1.2 [x86_64] # => - 当前 # =* - 当前 && 默认 # * - 默认

请注意显示当前和默认 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”以查看是否有某些内容可能会影响您。

【讨论】:

  • 我尝试了很多解决方案,但都没有解决问题,似乎乘客卡在系统 ruby​​ 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
  • 使用which passenger 找到它的隐藏位置。大概只有1.8.7目录下吧。
  • 这个输出是哪个乘客/home/ahmed/.rvm/gems/ruby-2.0.0-p481/bin/passenger
【解决方案2】:

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

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

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

【讨论】:

  • 除了Passenger,您可能还想执行捆绑安装和rails控制台,所以不应该有RVM/Rbenv/passenger_ruby。使用 /bin/alternatives 并永远选择所需的版本。
【解决方案3】:

这是我个人的看法:避免在生产中使用 RMV。在 CentOS 和可能的其他 linux 发行版上有一个名为 alternatives 的工具。

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

【讨论】:

    【解决方案4】:

    你可以使用这个命令:

    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

    【讨论】:

    • 尝试使用这个命令rvm --default use 2.0.0,就像这个documentation
    猜你喜欢
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多