Рельсы не используют правильную версию Ruby

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

Это то, что происходит с 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 ([email protected]) [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/[email protected]/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/[email protected]"
    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. Я просто не понимаю.

Ответ 1

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

rvm use 1.9.2 --default

Это переопределит установленный рубин с 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 ]

Ответ 2

Скорее всего, виновник:

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

Если/usr/bin находится перед RVM-местоположением, при проверке программ он примет /usr/bin/ruby ​​- Ruby, который пришел с вашим LINUX (скорее всего, 1.8.7) - не 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, отправляется FIRST, перед /usr/bin

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


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

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

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

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

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

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

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

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

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


ИЗМЕНИТЬ

Если вы получаете другой результат от 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 

Ответ 4

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

rvm --default use 1.9.2

Ответ 6

Я бы пошел на плохую установку gem/rails:

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Я не использую rvm, я должен был использовать это, чтобы установить стандартную рубиновую версию:

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

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

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