it-swarm.com.de

ruby LoadError: Diese Datei kann nicht geladen werden

Wenn ich zum Beispiel eine Datei benötige (genannt st.rb):

require 'rubygems'
require 'mongrel'

class TestHandler < Mongrel::HttpHandler

  def process(request, response)
    response.start(200) do |head, out|
      head["Content-Type"] = "text/html"
      out.write "Hello, World!\n"
    end
  end

end

in irb bekomme ich:

>> require 'st.rb'
LoadError: cannot load such file -- st.rb
    from /usr/local/lib/Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /usr/local/lib/Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from (irb):3
    from /usr/local/bin/irb:12:in `<main>'

Ich habe vielleicht eine Ahnung, aber es ist nur eine Vermutung. Meine Ruby-Version/Installationsposition lautet:

/usr/local/bin/Ruby und Ruby 1.9.3p0

ruby Gems ist jedoch in /usr/local/lib/Ruby/1.9.1 und es geht um Version 1.9.1. Könnte dies möglicherweise der Grund sein?

Vielen Dank!

UPDATE Seltsam, wenn ich in IRB "Ruby_VERSION setzt" eingibt, erhalte ich Folgendes:

puts Ruby_VERSION
1.9.3
NoMethodError: undefined method `write' for nil:NilClass
    from /usr/local/lib/Ruby/1.9.1/irb.rb:311:in `printf'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:311:in `output_value'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:160:in `block (2 levels) in eval_input'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:273:in `signal_status'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:156:in `block in eval_input'
    from /usr/local/lib/Ruby/1.9.1/irb/Ruby-Lex.rb:243:in `block (2 levels) in each_top_level_statement'
    from /usr/local/lib/Ruby/1.9.1/irb/Ruby-Lex.rb:229:in `loop'
    from /usr/local/lib/Ruby/1.9.1/irb/Ruby-Lex.rb:229:in `block in each_top_level_statement'
    from /usr/local/lib/Ruby/1.9.1/irb/Ruby-Lex.rb:228:in `catch'
    from /usr/local/lib/Ruby/1.9.1/irb/Ruby-Lex.rb:228:in `each_top_level_statement'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:155:in `eval_input'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:70:in `block in start'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:69:in `catch'
    from /usr/local/lib/Ruby/1.9.1/irb.rb:69:in `start'
    from /usr/local/bin/irb:12:in `<main>'
Maybe IRB bug!
>> 
22
0xSina

Das Verzeichnis, in dem sich st.rb befindet, befindet sich höchstwahrscheinlich nicht in Ihrem Ladepfad.

Angenommen, st.rb befindet sich in einem Verzeichnis namens lib relativ zu dem Aufruf von irb. Sie können dieses lib-Verzeichnis der Liste der Verzeichnisse hinzufügen, die Ruby zum Laden von Klassen oder Modulen verwendet:

$: << 'lib'

Um zum Beispiel das Modul 'foobar' (foobar.rb) aufzurufen, das im Verzeichnis lib gespeichert ist, muss ich zunächst das Verzeichnis lib der Liste des Ladepfads hinzufügen. Hier füge ich gerade das Verzeichnis lib an meinen Ladepfad an:

irb(main):001:0> require 'foobar'
LoadError: no such file to load -- foobar
        from /usr/lib/Ruby/site_Ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/lib/Ruby/site_Ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from (irb):1
irb(main):002:0> $:
=> ["/usr/lib/Ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/Ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/Ruby/site_Ruby/1.8", "/usr/lib/Ruby/site_Ruby/1.8/i386-cygwin", "/usr/lib/Ruby/site_Ruby", "/usr/lib/Ruby/vendor_Ruby/1.8", "/usr/lib/Ruby/vendor_Ruby/1.8/i386-cygwin", "/usr/lib/Ruby/vendor_Ruby", "/usr/lib/Ruby/1.8", "/usr/lib/Ruby/1.8/i386-cygwin", "."]
irb(main):004:0> $: << 'lib'
=> ["/usr/lib/Ruby/gems/1.8/gems/spoon-0.0.1/lib", "/usr/lib/Ruby/gems/1.8/gems/interactive_editor-0.0.10/lib", "/usr/lib/Ruby/site_Ruby/1.8", "/usr/lib/Ruby/site_Ruby/1.8/i386-cygwin", "/usr/lib/Ruby/site_Ruby", "/usr/lib/Ruby/vendor_Ruby/1.8", "/usr/lib/Ruby/vendor_Ruby/1.8/i386-cygwin", "/usr/lib/Ruby/vendor_Ruby", "/usr/lib/Ruby/1.8", "/usr/lib/Ruby/1.8/i386-cygwin", ".", "lib"]
irb(main):005:0> require 'foobar'
=> true

EDIT Entschuldigung, ich habe die Tatsache, dass Sie Ruby 1.9.x verwenden, völlig übersehen. Alle Konten berichten, dass Ihr aktuelles Arbeitsverzeichnis aus Sicherheitsgründen aus LOAD_PATH entfernt wurde , so dass Sie etwas in irb tun müssen:

$: << "."
18
buruzaemon

Aus Sicherheitsgründen und aus anderen Gründen fügt Ruby das aktuelle Verzeichnis standardmäßig nicht in den Ladepfad ein. Vielleicht möchten Sie dies überprüfen, um weitere Informationen zu erhalten - Warum entfernt Ruby 1.9.2 "." von LOAD_PATH und was ist die Alternative?

11
Dhruva Sagar

Das Problem muss gelöst sein, wenn Sie Ihren Pfad angeben.

z.B.

"erfordern 'st.rb'" -> "erfordern './st.rb'"

Sehen Sie, ob Ihr Problem gelöst wurde oder nicht.

9
Tom K. C. Chiu

Ich bin gerade auf ein ähnliches Problem gestoßen. Versuchen

require './st.rb'

Das sollte den Trick tun.

1
Faisal Hassan

Ich habe mein eigenes Gem erstellt, aber ich habe es in einem Verzeichnis gemacht, das sich nicht in meinem Ladepfad befindet:

$ pwd
/Users/myuser/projects
$ gem build my_gem/my_gem.gemspec

Dann lief ich irb und versuchte den Gem zu laden:

> require 'my_gem'
LoadError: cannot load such file -- my_gem

Ich habe die globale Variable $: verwendet, um meinen Lastpfad zu überprüfen, und mir wurde klar, dass ich RVM verwende. Und rvm hat bestimmte Verzeichnisse in meinem Ladepfad $:. Keines dieser Verzeichnisse enthielt mein ~/projects-Verzeichnis, in dem ich den benutzerdefinierten Edelstein erstellt habe.

Eine Lösung besteht also darin, den Ladepfad selbst zu ändern:

$: << "/Users/myuser/projects/my_gem/lib"

Beachten Sie, dass sich das Verzeichnis lib im Pfad befindet, der die Datei my_gem.rb enthält, die in irb benötigt wird:

> require 'my_gem'
 => true 

Wenn Sie nun den Edelstein im RVM-Pfad installieren möchten, müssen Sie Folgendes ausführen:

$ gem install my_gem

Aber es muss in einem Repository wie rubygems.org sein.

$ gem Push my_gem-0.0.0.gem
Pushing gem to RubyGems.org...
Successfully registered gem my_gem
0
Donato