Rails没有使用正确版本的Ruby

时间:2011-10-15 10:29:57

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

新信息

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。我只是不明白。

9 个答案:

答案 0 :(得分:6)

你应该设置默认的ruby,如:

rvm use 1.9.2 --default

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

更新:

notme,谢谢你的评论

默认情况下,前导双连字符对于设置默认红宝石很重要。

下面列出详细&自我解释的例子,享受:

$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 ]

答案 1 :(得分:4)

最有可能是罪魁祸首:

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

如果/ usr / bin位于RVM位置之前,那么在检查程序时,需要/ usr / bin / ruby​​ - LINUX附带的Ruby(最有可能是1.8.7) - 而不是RVM默认红宝石(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环境变量 - 在/ usr / bin

之前,确保安装RVM ruby​​版本的目录为FIRST

e.g。在我的PATH中,〜/ .rvm / ...首先出现,然后是/ usr / local / bin,然后是/ usr / bin(当然还有其他两个目录)


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

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

升级宝石时,恕我直言,全系统安装可能会变得一团糟,并且可能会导致一些问题。

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

检查RVM文档 - 它说:请注意单用户取代多用户[... RVM安装]。

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

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

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

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


修改

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


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

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

答案 2 :(得分:2)

您的用户目录中是否有.rvmrc个文件?

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

看起来应该是这样的吗?

还要检查您是否设置了.bashrc这样的文件:

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

答案 3 :(得分:1)

尝试使用:

rvm --default use 1.9.2

答案 4 :(得分:1)

您使用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/

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

确保您没有在RVM中使用sudo。我遇到了这样一个问题,我有两个不同的位置为Ruby和我的宝石。

答案 7 :(得分:0)

路径可能不对 - 请检查printenv PATH

答案 8 :(得分:0)

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

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

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

然后,我重新安装了捆绑器,它工作正常!

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