Рельсы не используют правильную версию 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
Ответ 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/
Ответ 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
И потом, я переустановил комплектщик, и он сработает!
Надеюсь, вы сможете решить эту проблему с помощью этого подхода.