Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails未使用正确版本的Ruby_Ruby On Rails_Ubuntu_Ruby 1.9 - Fatal编程技术网

Ruby on rails Rails未使用正确版本的Ruby

Ruby on rails Rails未使用正确版本的Ruby,ruby-on-rails,ubuntu,ruby-1.9,Ruby On Rails,Ubuntu,Ruby 1.9,新信息 这就是rails控制台发生的情况: Loading development environment (Rails 3.1.1) ruby-1.9.2-p290 :001 > RUBY_VERSION => "1.8.7" 这里发生了一些非常奇怪的事情-提示说1.9.2,但是RUBY\u版本显示1.8.7 我使用的是RVM,但Ubuntu上的Rails有问题 $ which ruby /home/nick/.rvm/rubies/ruby-1.9.2

新信息

这就是rails控制台发生的情况:

Loading development environment (Rails 3.1.1)
ruby-1.9.2-p290 :001 > RUBY_VERSION
 => "1.8.7" 
这里发生了一些非常奇怪的事情-提示说
1.9.2
,但是
RUBY\u版本
显示
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时,如果我运行
将RUBY_版本放入
中,它将输出
1.8.7

事实上,在
irb
中,
RUBY\u版本
给出了
1.9.2
,但在
rails控制台
中它给出了
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:       ""

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

您应该将默认ruby设置为:

rvm use 1.9.2 --default
这将用rvm one覆盖安装在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 ]
尝试使用:

rvm --default use 1.9.2

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

参见第2.3节,例如:


或者对于乘客:

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

$ cat ~/.rvmrc
=> export rvm_path="/home/nick/.rvm"
应该是这样的

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

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc 
最可能的罪魁祸首:

通过在shell中键入
printenv PATH
来检查PATH环境变量--/usr/bin可能在RVM安装Rubies的地方出现,但在使用RVM时,您不希望出现这种情况

如果/usr/bin位于RVM位置之前,那么在检查程序时,它将使用/usr/bin/ruby——LINUX附带的ruby(很可能是1.8.7)——而不是RVM默认的ruby(1.9.2)

通过询问您的系统
哪个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之前

e、 在我的道路上,~/.rvm/。。。首先是/usr/local/bin,然后是/usr/bin(当然还有几个其他的dir)


如前所述,
rvm——默认使用1.9.2
,因此您可以在任何新的shell中获得默认的Ruby版本

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

升级gems时,IMHO系统范围的安装可能会一团糟,并且可能会导致未来的几个问题

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

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

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

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

最后:当在用户帐户上安装local时,请确保您专门为正确的Ruby版本安装gems,并且不要使用sudo安装gems

希望这有帮助! 祝你好运


编辑

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


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


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

确保您没有将sudo与RVM一起使用。我遇到了这样一个问题,Ruby和gems有两个不同的位置

路径可能是错误的-检查
printenv路径

我会选择错误的gem/rails安装:

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

伙计,我遇到了这个问题,我解决这个问题的方法就是重新安装bundler。bundler似乎正在将RUBY_版本缓存到1.8.7

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

sudo update-alternatives --config ruby
sudo update-alternatives --config gem
然后,我重新安装了bundler,它成功了


希望您能用这种方法解决这个问题

已经这样做了<代码>RUBY\u版本
rails控制台中
仍然显示
1.9.2
。显然你忘了启动新会话,重新打开shell窗口不,我重新启动了会话,重新启动了计算机,仍然是
rails控制台中的
1.8.7
irb中的
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可执行文件:/usr/bin/ruby1.8中的行