9 Stimmen

Lade Fehler beim Ausführen der Rails-Konsole

Ich benutze Rails 4.1 und Ruby 2.1.1

Alles funktioniert, aber wenn ich rails console ausführe, erhalte ich diesen Fehler

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

Nach dem Fehler öffnet sich die Konsole und kann genutzt werden.

Hier ist die 41. Zeile und Umgebung in der .irbrc Datei.

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

Ich erhalte diese Ergebnisse beim Testen in der Konsole

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

Wenn ich irb außerhalb der Rails-Anwendung ausführe, erhalte ich

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" 

Wissen Sie, warum die Umgebungsvariable in der Rails-Anwendung leer ist?

9voto

Andreas Lyngstad Punkte 4857

Wenn Sie auf dieses Problem stoßen, sollten Sie Ihren Computer neu starten. Wenn das nicht hilft, lesen Sie weiter.

Die Datei bin/spring setzt ENV["GEM_HOME"] auf einen leeren 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

Dies stürzt ab, wenn Sie rails console ausführen, weil in Zeile 41

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

nil zurückgibt, wenn ENV['GEM_HOME'] leer ist

~/.rvm/rubies/ruby-2.1.1/.irbrc

39 # Berechnen Sie den 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 verwendet den String, um die Eingabeaufforderungsnachricht in der Konsole festzulegen. Wenn Sie Zeile 12 in bin/spring ändern zu

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

Bekommen Sie diese schöne Eingabeaufforderung

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

Ich verstehe nicht wirklich, warum ENV["GEM_HOME"] auf einen leeren String gesetzt ist. Also habe ich das nur geändert, um den Fehler loszuwerden. Ich habe ein Problem auf der Spring-Github-Seite gepostet.

Vorsicht!

Jede Änderung an der Datei bin/spring wird überschrieben, wenn Sie den Befehl spring binstub ausführen

2voto

Weihang Jian Punkte 6493

Ich bin gerade auf dasselbe Problem gestoßen und habe es durch spring stop gelöst. Ich glaube, es ist nicht notwendig, den Computer neu zu starten. Was du tun solltest, ist Spring neu zu starten.

0voto

Furkan Ayhan Punkte 1349

Diese Schritte haben mein Problem gelöst:

  • Finde die aktuelle Ruby-Version

ruby -v

Beispiel:

ruby 2.1.2p95 (2014-05-08 Revision 45877) [x86_64-darwin13.0]

  • Entferne diese Version

rvm remove 2.1.2

  • installiere erneut

rvm install 2.1.2

0voto

Ryenski Punkte 9309

Sie müssen möglicherweise einfach ein gemset angeben mit

rvm gemset use YourGemset

Es ist eine gute Idee, für jedes Projekt ein separates gemset zu verwenden. Platzieren Sie dann den Namen des gemsets des Projekts in einer Datei namens .ruby-gemset im Stammverzeichnis Ihres Projekts. Weitere Informationen finden Sie unter https://rvm.io/workflow/projects.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X