Rails 3: comment charger les fichiers dans / lib?
Je suis nouveau sur les rails et faire une sorte d'erreur de débutant: j'ai souvent besoin de compter le nombre de lignes dans un fichier, donc je suis en train de monkey patch Fichier de classe comme ceci:
class File
def self.line_count( filename )
%x{wc -l #{filename}}.split.first.to_i
end
end
J'ai sauvé ce /lib/file_util.rb. J'ai pensé que ce devait être auto-requis, pour que je puisse l'utiliser, mais cela ne fonctionne pas:
$ rails console
>> File.line_count('Gemfile')
NoMethodError: undefined method `line_count' for File:Class
...
J'ai donc essayer de l'exiger manuellement, pas de joie:
>> require '<myproj>/lib/file_util.rb' # same result with require 'file_util.rb'
=>nil
Mais cela fonctionne si j'ai besoin d'elle au sein de la CISR:
$ irb
>> require '<myproj>/lib/file_util.rb'
=> true
>> File.line_count('Gemfile')
=> 22
J'ai aussi essayé d'ajouter le besoin de config/application.rb:
...
Bundler.require(:default, Rails.env) if defined?(Bundler)
require 'file_util.rb'
module <myproj>
...
et j'obtiens:
$ rails console
<myproj>/config/application.rb:9:in `require': no such file to load -- file_util.rb (LoadError)
Ce que je fais mal?
source d'informationauteur Mori
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai surtout pensé à elle. Les Rails ne sont pas automatiquement besoin de tout sous /lib. Il ne auto se charge lorsque vous essayez d'utiliser un nouveau nom de la classe qui correspond à un nom de fichier dans le répertoire lib. Donc, si je définir line_count dans la classe FileUtil au lieu de Fichier automatiquement détecte et charge 'file_util.rb'. Mais patching File et de nommer le fichier de correctif".rb " ne fonctionne pas, puisque le Fichier de classe est déjà défini, de sorte que les Rails ne pas aller à la recherche d'une définition.
Mon autre problème était que j'était en train de faire l'exigent trop tôt dans la séquence de démarrage, avant de Rails avaient une chance d'améliorer besoin de regarder dans ses répertoires. Quand j'ai ajouté "exigent " file_util'" config/environments/développement.rb, il fonctionne très bien.
Mais cela n'explique pas pourquoi je ne peux pas manuellement exiger le fichier dans la console rails.
Monkeypatching classes peut être fait plus facilement par l'ajout d'un fichier dans
config/initializers
. Tous ces fichiers sont automatiquement chargé par les Rails au démarrage.Vous pouvez appeler votre initializer tout ce que vous voulez. Essayez
config/initializers/file.rb
.