Ошибка Ruby 'require': невозможно загрузить такой файл - PullRequest
164 голосов
/ 17 марта 2012

У меня есть один файл main.rb со следующим содержимым:

require "tokenizer.rb"

Файл tokenizer.rb находится в том же каталоге , и его содержимое:

class Tokenizer
    def self.tokenize(string)
        return string.split(" ")
    end
end

Если я пытаюсь запустить main.rb, я получаю следующую ошибку:

C:\Documents and Settings\my\src\folder>ruby main.rb

C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- tokenizer.rb (LoadError)
        from C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require '
        from main.rb:1:in `<main>'

Я только что заметил, что если я использую load вместо require, все работает нормально.В чем может быть проблема?

Ответы [ 13 ]

0 голосов
/ 12 февраля 2017

Для тех, кто абсолютно уверен, что их относительный путь указан правильно, моя проблема заключалась в том, что мои файлы не имели расширения .rb!(Хотя я использовал RubyMine для создания файлов и выбрал, чтобы они были Ruby файлами при создании.)

Дважды проверьте расширения файлов в вашем файле!

0 голосов
/ 19 августа 2015

вам нужно указать путь. По крайней мере, вы должны указать путь из текущего каталога. Это будет работать наверняка. ./filename

0 голосов
/ 17 марта 2012

Проблема в том, что require не загружается из текущего каталога. Я тоже так думал, но потом нашел эту тему . Например, я попробовал следующий код:

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

Как видно, он прочитал файл нормально, но я не смог его потребовать (путь не был распознан). и вот код, который работает:

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

Как видите, если указать полный путь, файл загружается правильно.

...