Ошибка загрузки при запуске консоли рельсов

Я использую rails 4.1 и ruby ​​2.1.1

Все работает, но когда я запускаю консоль rails, я получаю эту ошибку

> rails console
Loading development environment (Rails 4.1.0)
load error: /home/andreas/.rvm/rubies/ruby-2.1.1/.irbrc
NoMethodError: undefined method `split' for nil:NilClass
    /home/andreas/.rvm/scripts/irbrc.rb:41:in `<top (required)>'

После ошибки консоль открывается и может быть использована.

Здесь 41-я строка и окружение в файле .irbrc.

39 # Calculate the ruby string.
40 rvm_ruby_string = ENV["rvm_ruby_string"] ||
41 (ENV['GEM_HOME'] && ENV['GEM_HOME'].split(/\//).last.split(/@/).first) ||
42 ("#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" rescue nil) ||
43 (RUBY_DESCRIPTION.split(" ")[1].sub('p', '-p') rescue nil ) ||
44 (`ruby -v` || '').split(" ")[1].sub('p', '-p')

Получаю эти результаты при тестировании на консоли

irb(main):008:0> ENV['GEM_HOME']
=> ""
irb(main):009:0> ENV['GEM_HOME'].split(/\//).last
=> nil

Если я запустил irb вне приложения rails, я получаю

2.1.1 :001 > ENV['GEM_HOME']
 => "/home/andreas/.rvm/gems/ruby-2.1.1" 
2.1.1 :002 > ENV['GEM_HOME'].split(/\//).last
 => "ruby-2.1.1" 

Знаете ли вы, почему переменная окружения пуста в приложении rails?

Ответ 1

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

Файл bin/ spring устанавливает ENV [ "GEM_HOME" ] в пустую строку

бен/spring

11 ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
12 ENV["GEM_HOME"] = ""
13 Gem.paths = ENV

Это сбой при запуске консоли rails, потому что в строке 41

ENV['GEM_HOME'].split(/\//).last

возвращает nil, если ENV['GEM_HOME'] пуст

~/.rvm/рубины/рубинового 2.1.1/.irbrc

39 # Calculate the ruby string.
40 rvm_ruby_string = ENV["rvm_ruby_string"] ||
41 (ENV['GEM_HOME'] && ENV['GEM_HOME'].split(/\//).last.split(/@/).first) ||
42 ("#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" rescue nil) ||
43 (RUBY_DESCRIPTION.split(" ")[1].sub('p', '-p') rescue nil ) ||
44 (`ruby -v` || '').split(" ")[1].sub('p', '-p')

rvm использует строку для установки приглашения в консоли. Если вы измените строку 12 в bin/ spring на

ENV["GEM_HOME"] = "Spring is great!"

Вы получите это приятное приглашение

bin/rails c
Loading development environment (Rails 4.1.0)
Spring is great! :001 > 

Я действительно не понимаю, почему ENV["GEM_HOME"] устанавливается в пустую строку. Поэтому я просто изменяю это, чтобы избавиться от ошибки. Я опубликовал проблему на странице spring github.

Осторожно!

Любые изменения в файле bin/ spring перезаписываются при запуске команды spring binstub

Ответ 2

Я столкнулся с одной и той же проблемой, и решил ее spring stop. Я думаю, что нет необходимости перезагружать компьютер. Вам следует перезагрузить spring.

Ответ 3

Эти шаги решили мою проблему:

  • найдите текущую версию ruby ​​

ruby ​​-v

пример:

ruby ​​2.1.2p95 (версия 2014-05-08 45877) [x86_64-darwin13.0]

  • удалите эту версию

rvm удалить 2.1.2

  • установить снова

rvm install 2.1.2

Ответ 4

Вам просто нужно указать gemset с помощью

rvm gemset use YourGemset

Я считаю хорошей идеей использовать отдельный гемсет для каждого проекта. Затем поместите имя этого проекта gemset в файл с именем .ruby-gemset в корень вашего проекта. Подробнее см. https://rvm.io/workflow/projects.