【问题标题】:Rails not using correct version of RubyRails 没有使用正确版本的 Ruby
【发布时间】:2011-10-15 10:29:56
【问题描述】:

新信息

rails console 会发生这种情况:

Loading development environment (Rails 3.1.1)
ruby-1.9.2-p290 :001 > RUBY_VERSION
 => "1.8.7" 

这里发生了一些非常奇怪的事情 - 提示显示 1.9.2RUBY_VERSION 显示 1.8.7


我正在使用 RVM,但在 Ubuntu 上遇到 Rails 问题。

$ which ruby
/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

$rvm list
rvm rubies
=> ruby-1.9.2-p290 [ i686 ]

但如果我这样做 gem env 我会得到

RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.11
  - RUBY VERSION: 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
  - INSTALLATION DIRECTORY: /home/nick/.rvm/gems/ruby-1.9.2-p290
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /home/nick/.rvm/gems/ruby-1.9.2-p290/bin

当我运行 Rails 时,如果我执行 puts RUBY_VERSION,它会输出 1.8.7

事实上,在irb 中,RUBY_VERSION 给出了1.9.2,但在rails console 中给出了1.8.7

主要问题是当它到达我的 JSON 风格的哈希文字时它失败了。

我尝试了各种卸载 rvm、rails、bundler 等的方法,但似乎没有任何效果。有什么想法吗?

编辑:

这是rvm info的输出:

ruby-1.9.2-p290:

  system:
    uname:       "Linux ubie 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 i686 i386 GNU/Linux"
    bash:        "/bin/bash => GNU bash, version 4.2.10(1)-release (i686-pc-linux-gnu)"
    zsh:         " => not installed"

  rvm:
    version:      "rvm 1.8.6 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"

  ruby:
    interpreter:  "ruby"
    version:      "1.9.2p290"
    date:         "2011-07-09"
    platform:     "i686-linux"
    patchlevel:   "2011-07-09 revision 32553"
    full_version: "ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]"

  homes:
    gem:          "/home/nick/.rvm/gems/ruby-1.9.2-p290"
    ruby:         "/home/nick/.rvm/rubies/ruby-1.9.2-p290"

  binaries:
    ruby:         "/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin/ruby"
    irb:          "/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin/irb"
    gem:          "/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin/gem"
    rake:         "/home/nick/.rvm/gems/ruby-1.9.2-p290/bin/rake"

  environment:
    PATH:         "/home/nick/.rvm/gems/ruby-1.9.2-p290/bin:/home/nick/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin:/home/nick/.rvm/bin:/home/nick/local/node/bin:/home/nick/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
    GEM_HOME:     "/home/nick/.rvm/gems/ruby-1.9.2-p290"
    GEM_PATH:     "/home/nick/.rvm/gems/ruby-1.9.2-p290:/home/nick/.rvm/gems/ruby-1.9.2-p290@global"
    MY_RUBY_HOME: "/home/nick/.rvm/rubies/ruby-1.9.2-p290"
    IRBRC:        "/home/nick/.rvm/rubies/ruby-1.9.2-p290/.irbrc"
    RUBYOPT:      ""
    gemset:       ""

gem env 仍然告诉我,在 RubyGems 环境中,Ruby 版本是1.8.7。我就是不明白。

【问题讨论】:

  • 看起来您编辑了您的问题 - PATH 看起来不错。我之前看到的 /usr/local 引用发生了什么?
  • @Tilo 我不确定你在说什么 /usr/local...你在哪里看到的?
  • hmmm .. 抱歉,我以为我之前在您的问题中看到了这一点。我的错。
  • 您能否尝试为新用户帐户安装 RVM 和 Ruby 1.9.2,看看是否可行?我怀疑您拥有的 ~/.rvm 安装或早期系统范围 RVM 安装的某些剩余部分有问题。或者在 Ruby 1.9.2 的编译过程中似乎出了什么问题。
  • 如果你可以让它为一个新的用户帐户工作,那么这很好地表明你的 ~/.rvm 已经搞砸了,我会rm -rf ~/.rvm 并重新安装 RVM 和 Ruby在您的原始帐户上刮擦。

标签: ruby-on-rails ubuntu ruby-1.9


【解决方案1】:

你应该像这样设置默认的 ruby​​:

rvm use 1.9.2 --default

这将使用 rvm 覆盖系统安装的 ruby​​。

更新:

不是我,谢谢你的评论

默认前的前导双连字符对于设置默认 ruby​​ 非常重要。

下面列出了详细且不言自明的示例,请欣赏:

$ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-linux]

$rvm list
rvm rubies

   ruby-1.9.2-p290 [ i386 ]

$rvm use 1.9.2 --default
Using /usr/local/rvm/gems/ruby-1.9.2-p290

$rvm list default

Default Ruby (for new shells)

   ruby-1.9.2-p290 [ i386 ]

$rvm use default
Using /usr/local/rvm/gems/ruby-1.9.2-p290

$ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

$rvm list 

rvm rubies

=> ruby-1.9.2-p290 [ i386 ]

【讨论】:

  • 已经这样做了。 RUBY_VERSIONrails console 中仍然显示1.9.2
  • 显然你忘了开始新会话,重新打开你的 shell 窗口
  • 不,我已经重新启动了会话,重新启动了我的计算机,仍然是rails console 中的1.8.7irb 中的1.9.2
  • 我知道如何使用 RVM 设置默认的 Ruby,我已经做到了。 irb 使用 1.9.2,ruby -v 显示 1.9.2,rvm-prompt 显示 1.9.2,但 Rails仍然使用 1.8.7。
  • 奇怪的交易,我不知道强制rails使用不同版本的ruby的开箱即用方式,因为它们都依赖于当前shell中的ruby可执行文件。另外,我希望您没有修改 rails 可执行文件并使用默认文件。我还假设您在版本测试之间没有运行任何 .rvmrc! (:来自 gem env 的挑战线:- RUBY EXECUTABLE: /usr/bin/ruby1.8,指向 system-not-rvm ruby​​ 和其他路径基于 rvm。如果您仍然遇到问题,请发布 rvm info 输出
【解决方案2】:

最有可能的罪魁祸首:

通过在 shell 中键入 printenv PATH 来检查您的 PATH 环境变量——/usr/bin 可能会出现在 RVM 安装它的红宝石之前——但在使用 RVM 时你不希望这样!!

如果 /usr/bin 位于 RVM 位置之前,则在检查程序时,它将采用 /usr/bin/ruby -- 随 LINUX(很可能是 1.8.7)附带的 Ruby -- 而不是 RVM默认 ruby​​(即 1.9.2)

您可以通过询问您的系统which ruby 来仔细检查:

which ruby                           # this should be an RVM path! , not /usr/bin
ruby --version                       # you want this to be 1.9.2
/usr/bin/ruby --version              # the old system default Ruby is most likely 1.8.7

~/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
~/.rvm/rubies/default/bin/ruby --version

检查您的 PATH 环境变量——确保您的 RVM ruby​​ 版本的安装目录首先出现在 /usr/bin 之前

例如在我的 PATH 中,首先是 ~/.rvm/...,然后是 /usr/local/bin,然后是 /usr/bin(当然还有其他几个目录)


如前所述,rvm --default use 1.9.2,因此您可以在任何新的 shell 中获得默认的 Ruby 版本。

看起来您已经在 /usr/local 下安装了 RVM 系统范围。

恕我直言,在升级 gem 时,系统范围的安装可能会一团糟,并且可能会导致一些问题。

我不建议这样做!我与 Wayne Seguin 进行了更长的电子邮件讨论,甚至他的环境也使用本地用户 RVM。

检查 RVM 文档 - 上面写着:请注意单用户取代多用户 [...RVM 安装]。

这意味着,如果您已在系统范围内安装了 RVM,并且您还(不小心?)为用户帐户安装了它,那么对于该用户,本地安装的 RVM 优先。这是一个额外的陷阱,通过首先不安装系统范围很容易避免:)

就我个人而言,我会卸载系统范围的 RVM 并仅为相关用户安装它,这样他们就可以更轻松地自己安装 gem,而不会干扰其他用户。

最后:在本地安装到用户帐户时,请确保专门为正确的 Ruby 版本安装 gem,并且不要使用 sudo 来安装 gem!

希望这会有所帮助! 祝你好运!


编辑

如果您从 RUBY_VERSION 获得的输出与您的 irb 或 rails 控制台提示符不同,那么 Ruby 的编译/安装方式一定有问题。 这看起来越来越像您需要重新安装 RVM 和 Ruby 版本 1.9.2,但首先检查您的 PATH,以确保这不是罪魁祸首。


健全性检查,检查您的 LINUX 安装是否存在干扰:

创建一个新用户帐户,为该用户执行新的 RVM 安装并安装 Ruby 1.9.2 -- 然后尝试它是否在该帐户中工作,或者它是否显示相同的问题。

【讨论】:

    【解决方案3】:

    您的用户目录中有.rvmrc 文件吗?

    $ cat ~/.rvmrc
    => export rvm_path="/home/nick/.rvm"
    

    应该是这样的?

    还要检查您是否设置了一个 .bashrc 文件,如下所示:

    echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc 
    

    【讨论】:

    • 是的!在您的主目录和项目目录中查找 .rvmc 文件。我已经尝试了上述所有选项,例如 --default 等,并且我相信(不久前)删除 .rvmc 文件是最后的(而且不是太明显!)技巧。 :)
    【解决方案4】:

    尝试使用:

    rvm --default use 1.9.2
    

    【讨论】:

      【解决方案5】:

      您是否使用Passenger 或Pow 来运行您的Rails 应用程序?如果是这样,您需要将服务器设置为使用 rvm 1.9.2

      请参阅此处的第 2.3 节,例如:http://pow.cx/manual.html#section_2

      或乘客:http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/

      【讨论】:

      • 不,WEBrick(运行 RSpec 时也会发生同样的事情)。
      【解决方案6】:

      我会选择糟糕的 gem/rails 安装:

      gem empty
      gem update --system
      gem install bundler --no-ri --no-rdoc
      gem install rails --no-ri --no-rdoc
      

      【讨论】:

        【解决方案7】:

        确保您没有在 RVM 中使用 sudo。我遇到了这样的问题,我有 2 个不同的位置用于 Ruby 和我的 gem。

        【讨论】:

          【解决方案8】:

          PATH 可能是错误的 - 检查printenv PATH

          【讨论】:

          • printenv PATH/home/nick/.rvm/gems/ruby-1.9.2-p290/bin:/home/nick/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/nick/.rvm/rubies/ruby-1.9.2-p290/bin:/home/nick/.rvm/bin:/home/nick/local/node/bin:/home/nick/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
          【解决方案9】:

          伙计,我遇到了这个确切的问题,我解决它的方法是重新安装 bundler。似乎捆绑器正在将 RUBY_VERSION 缓存到 1.8.7。

          我没有使用 rvm,我必须使用它来设置默认的 ruby​​ 版本:

          sudo update-alternatives --config ruby
          sudo update-alternatives --config gem
          

          然后,我重新安装了 bundler,它成功了!

          希望你能用这种方法解决它

          【讨论】:

            猜你喜欢
            • 2012-05-14
            • 2014-11-24
            • 1970-01-01
            • 2023-04-07
            • 1970-01-01
            • 2014-02-04
            • 1970-01-01
            • 2019-05-19
            相关资源
            最近更新 更多