Ошибка загрузки при запуске консоли рельсов
Я использую 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.