Направляющие 3: как загрузить файлы в / lib?

Я плохо знаком с направляющими и деланием своего рода ошибки новичка: Я часто должен считать количество строк в файле, таким образом, я пробую к классу патча обезьяны Файл как это:

class File
  def self.line_count( filename ) 
    %x{wc -l #{filename}}.split.first.to_i  
  end
end

Я сохранил это к/lib/file_util.rb. Я думал, что это, как предполагалось, автотребовалось, так, чтобы я мог просто использовать его, но это не работает:

$ rails console
>> File.line_count('Gemfile')
NoMethodError: undefined method `line_count' for File:Class
...

Таким образом, я пытаюсь потребовать его вручную, никакая радость:

>> require '<myproj>/lib/file_util.rb' # same result with require 'file_util.rb'
=>nil

Но это работает, если я требую его в IRB:

$ irb
>> require '<myproj>/lib/file_util.rb'
=> true
>> File.line_count('Gemfile')
=> 22

Я также пытался для добавления требования к config/application.rb:

...
Bundler.require(:default, Rails.env) if defined?(Bundler)

require 'file_util.rb'

module <myproj>
...

и я добираюсь:

$ rails console
<myproj>/config/application.rb:9:in `require': no such file to load -- file_util.rb (LoadError)

Что я делаю неправильно?

11
задан Mori 16 July 2010 в 13:41
поделиться

1 ответ

Так, кажется, я в основном разобрался. Rails не требует автоматически все, что находится в каталоге /lib. Он автоматически загружается только тогда, когда вы пытаетесь использовать новое имя класса, которое совпадает с именем файла в lib. Так что если я определяю line_count в классе FileUtil вместо File, он автоматически находит и загружает 'file_util.rb'. Но исправление File и именование файла исправления 'file.rb' не работает, поскольку класс File уже определен, и Rails не будет искать его определение.

Другая моя проблема заключалась в том, что я пытался сделать require слишком рано в последовательности запуска, до того, как Rails успеет улучшить require для поиска в своих каталогах. Когда я добавил "require 'file_util'" в config/environments/development.rb, все работает нормально.

Но это не объясняет, почему я не могу вручную потребовать файл из консоли rails.

11
ответ дан 3 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: