Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load error when running rails console

I am using rails 4.1 and ruby 2.1.1

Everything works, but when I run rails console I get this error

> 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)>'

After the error the console opens and can be used.

Here's the 41th line and surroundings in the .irbrc file.

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')

I get these results when testing in the console

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

If I run irb outside the rails application, I get

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" 

Do you know why the environment variable is blank in the rails application?

like image 375
Andreas Lyngstad Avatar asked Apr 22 '14 09:04

Andreas Lyngstad


2 Answers

If you encounter this problem you should restart you computer. If that does not fix it read on.

The bin/spring file sets ENV["GEM_HOME"] to a blank string

bin/spring

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

This crashes when running rails console because in line 41

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

returns nil if ENV['GEM_HOME'] is blank

~/.rvm/rubies/ruby-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 uses the string to set the prompt message in the console. If you change line 12 in bin/spring to

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

You get this nice prompt

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

I don't really understand why ENV["GEM_HOME"] is set to a blank string. So, I just change this to get rid of the error. I have posted an issue on the spring github page.

Beware!

Any changes to the bin/spring file gets overwritten when you run the spring binstub command

like image 122
Andreas Lyngstad Avatar answered Oct 01 '22 18:10

Andreas Lyngstad


I just encountered the same problem, and I solved it by spring stop. I think there is no need to restart the computer. What you should do is to restart spring.

like image 44
Weihang Jian Avatar answered Oct 01 '22 17:10

Weihang Jian