2013-06-04 7 views
6

Ich habe die folgende Struktur der Dateien:Wie beheben Sie diesen Fehler: kernel_require.rb: 45: in `require ': kann solche Datei nicht laden?

  • execute.rb
  • lib
    • my_class.rb

Im execute.rb ich den Code unten haben:

#!/usr/bin/ruby 

require 'lib/my_class' 

my_object= MyClass.new 

my_object.some_method 

Und das ist der Code von my_class.rb:

class MyClass 
    def some_method 
     puts 'OK' 
    end 
end 

So habe ich versucht, die execute.rb laufen:

ruby execute.rb 

Aber ich erhalte diesen Fehler:

/home/vagrant/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- lib/my_class (LoadError) 
    from /home/vagrant/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from execute.rb:3:in `<main>' 

Can jemand mir helfen? Ich werde jede Hilfe zu schätzen wissen. Vielen Dank.

+4

Verwenden Sie 'require_relative' anstelle von' require'. Dies wurde in Ruby 1.9 geändert. – Dogbert

+0

@Dogbert Danke, dieser Fix arbeitete für mich. – monteirobrena

+0

Ruby 2.1.7 arbeitete für mich –

Antwort

7

Ich behebe das nach dem Hinweis von @Dogbert.

Bei execute.rb Code ist es notwendig, ersetzen:

require 'lib/my_class' 

für:

require_relative 'lib/my_class' 
1

ich hatte das gleiche Problem. Sie könnten auch load 'lib/my_class.rb' verwenden. require_relative nimmt das Suffix .rb an und Sie müssen es nicht aufschreiben. load benötigt den vollständigen Dateinamen.