Ruby 'require' error: cannot load such file

后端 未结 13 1341
抹茶落季
抹茶落季 2020-12-02 05:07

I\'ve one file, main.rb with the following content:

require \"tokenizer.rb\"

The tokenizer.rb file is in the same directory and it

相关标签:
13条回答
  • 2020-12-02 05:41

    The problem is that require does not load from the current directory. This is what I thought, too but then I found this thread. For example I tried the following code:

    irb> f = File.new('blabla.rb')
    => #<File:blabla.rb>
    irb> f.read
    => "class Tokenizer\n    def self.tokenize(string)\n        return string.split(
    \" \")\n    end\nend\n"
    irb> require f
    LoadError: cannot load such file -- blabla.rb
            from D:/dev/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `req
    uire'
            from D:/dev/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `req
    uire'
            from (irb):24
            from D:/dev/Ruby193/bin/irb:12:in `<main>'
    

    As it can be seen it read the file ok, but I could not require it (the path was not recognized). and here goes code that works:

    irb f = File.new('D://blabla.rb')
    => #<File:D://blabla.rb>
    irb f.read
    => "class Tokenizer\n    def self.tokenize(string)\n        return string.split(
    \" \")\n    end\nend\n"
    irb> require f
    => true
    

    As you can see if you specify the full path the file loads correctly.

    0 讨论(0)
  • 2020-12-02 05:44

    I used jruby-1.7.4 to compile my ruby code.

    require 'roman-numerals.rb' 
    

    is the code which threw the below error.

    LoadError: no such file to load -- roman-numerals
      require at org/jruby/RubyKernel.java:1054
      require at /Users/amanoharan/.rvm/rubies/jruby-1.7.4/lib/ruby/shared/rubygems/custom_require.rb:36
       (root) at /Users/amanoharan/Documents/Aptana Studio 3 Workspace/RubyApplication/RubyApplication1/Ruby2.rb:2
    

    I removed rb from require and gave

    require 'roman-numerals' 
    

    It worked fine.

    0 讨论(0)
  • 2020-12-02 05:47

    I just tried and it works with require "./tokenizer". Hope this helps.

    0 讨论(0)
  • 2020-12-02 05:55

    Ruby 1.9 has removed the current directory from the load path, and so you will need to do a relative require on this file, as David Grayson says:

    require_relative 'tokenizer'
    

    There's no need to suffix it with .rb, as Ruby's smart enough to know that's what you mean anyway.

    0 讨论(0)
  • 2020-12-02 05:55

    Another nice little method is to include the current directory in your load path with

    $:.unshift('.')
    

    You could push it onto the $: ($LOAD_PATH) array but unshift will force it to load your current working directory before the rest of the load path.

    Once you've added your current directory in your load path you don't need to keep specifying

     require './tokenizer' 
    

    and can just go back to using

    require 'tokenizer'
    
    0 讨论(0)
  • 2020-12-02 05:55

    For those who are absolutely sure their relative path is correct, my problem was that my files did not have the .rb extension! (Even though I used RubyMine to create the files and selected that they were Ruby files on creation.)

    Double check the file extensions on your file!

    0 讨论(0)
提交回复
热议问题