Rails не использует правильную версию Ruby - PullRequest
10 голосов
/ 15 октября 2011

Новая информация

Вот что происходит с rails console:

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

Здесь происходит что-то действительно странное - подсказка говорит 1.9.2, но RUBY_VERSION показывает 1.8.7.


Я использую RVM, но у меня проблемы с Rails в Ubuntu.

$ 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 и т. Д., Но, похоже, ничего не работает. Есть идеи?

EDIT:

Вот вывод 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 ]

6 голосов
/ 15 октября 2011

Вы должны установить ruby ​​по умолчанию, например:

rvm use 1.9.2 --default

Это переопределит системный ruby, установленный в rvm one.

Обновлено:

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 ]
4 голосов
/ 19 октября 2011

Скорее всего, Culprit:

Проверьте переменную среды PATH, набрав в командной строке printenv PATH - / usr / bin может появиться раньше, где RVM устанавливает свои Ruby - но вы этого не хотите, когдаиспользование RVM !!

Если / usr / bin находится перед RVM-местоположением, при проверке программ он будет принимать / usr / bin / ruby ​​- Ruby, поставляемый с LINUX (скорее всего, 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 - убедитесь, что каталог, в котором установлена ​​ваша версия RVM ruby, находится ПЕРВЫМ, перед / usr / bin

, например, в моем PATH, появляется ~ / .rvm / ...сначала, затем / usr / local / bin, затем / usr / bin (с парой других каталогов, конечно)


, как упоминалось ранее, rvm --default use 1.9.2, так что вы получаете версию Ruby по умолчанию влюбая новая оболочка.

Похоже, вы установили RVM для всей системы в /usr/local.

IMОбщесистемная установка HO может привести к путанице при обновлении гемов, и это может вызвать пару проблем в будущем.

Я бы не рекомендовал делать это!У меня было более длительное обсуждение по электронной почте с Уэйном Сегуином, и даже он использует RVM локального пользователя для своих сред.

Проверьте документацию RVM - там написано: Обратите внимание, что однопользовательский заменяет многопользовательский [...Установка RVM].

Это означает, что если вы установили RVM для всей системы и также (случайно?) Установили его для учетной записи пользователя, то для этого пользователя локально установленный RVM имеет преимущество.Это дополнительный провал, которого легко избежать, не устанавливая общесистемную систему в первую очередь:)

Лично я бы удалил общесистемный RVM и установил бы его только для соответствующих пользователей.), который затем может легче установить свои драгоценные камни самостоятельно, не мешая другим пользователям.

Наконец: при установке локально для учетной записи пользователя, убедитесь, что вы устанавливаете свои драгоценные камни специально для правильной версии Ruby, и что выне используйте sudo для установки драгоценных камней!

надеется, что это поможет!удачи!


РЕДАКТИРОВАТЬ

Если вы получаете другой вывод из RUBY_VERSION, чем ваш запрос консоли irb или rails, значит, что-то не так скак Ruby был скомпилирован / установлен. Это все больше и больше похоже на то, что вам нужно переустановить RVM и вашу версию Ruby 1.9.2 , но сначала проверьте вашу PATH, чтобы убедиться, что это не преступник.


Проверка работоспособности, чтобы проверить, есть ли помехи от вашей установки LINUX:

создайте новую учетную запись пользователя, выполните новую установку RVM для этого пользователя и установите Ruby 1.9.2 - затем попробуйте, если он работает в этомили если он показывает те же проблемы.

2 голосов
/ 17 октября 2011

Есть ли у вас .rvmrc файл в вашем каталоге пользователя?

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

Это должно выглядеть примерно так?

А также проверьте, что вы настроили файл .bashrc следующим образом:

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc 
1 голос
/ 24 октября 2011

Я бы пошел на установку плохих самоцветов / рельсов:

gem empty
gem update --system
gem install bundler --no-ri --no-rdoc
gem install rails --no-ri --no-rdoc
1 голос
/ 15 октября 2011

Вы используете 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/

1 голос
/ 15 октября 2011

Попробуйте использовать:

rvm --default use 1.9.2
0 голосов
/ 10 сентября 2012

Человек, у меня была именно эта проблема, и я решил ее путем переустановки bundler. Похоже, что упаковщик кэшировал RUBY_VERSION до 1.8.7.

Я не использую rvm, мне пришлось использовать это для установки версии ruby ​​по умолчанию:

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

А потом я переустановил упаковщик, и он заработал!

Надеюсь, вы сможете решить эту проблему с помощью этого подхода

0 голосов
/ 19 октября 2011

PATH, вероятно, неправильно - проверьте printenv PATH

0 голосов
/ 19 октября 2011

Убедитесь, что вы не использовали sudo с RVM. Я столкнулся с такой проблемой, когда у меня было 2 разных места для Ruby и моих драгоценных камней.

...