2010-05-20 22 views
5

J'ai une classe située dans le dossier RAILS_ROOT/lib, que j'utilise dans l'un de mes helpers, et ça marche très bien en développement.Rails - pourquoi un modèle à l'intérieur de RAILS_ROOT/lib ne serait-il pas disponible en mode production?

Lorsque je passe à la production, l'application lance une NameError (uninitialized constant SomeHelper::SomeClass), et je dois le charger manuellement dans l'assistant:

load "#{Rails.root}/lib/some_class.rb" 

module SomeHelper 
    def some_method 
    sc = SomeClass.new 
    # blah 
    end 
end 

J'avais l'impression que tout à l'intérieur RAILS_ROOT/lib/* devrait être disponible tout à l'application - y at-il quelque chose que j'ai besoin de configurer pour que cela se produise en mode prod? Merci.

Répondre

1

Lorsque vous appelez SomeHelper :: SomeClass, mécanisme de chargement automatique de Rails essayera de charger le fichier à lib/some_helper/some_class.rb

Rails ne se charge pas tout dans lib/*, il n'essayera de charger fichiers lorsque ConstMissing se produit.

1

Vous devrez peut-être vérifier les différences entre les paramètres de configuration entre l'environnement de développement et de production: config/environments/production.rb et config/environments/development.rb.

Au cours de la routine d'initialisation Rails, load_plugins() est appelée, ce qui charge tous les plugins dans config.plugin_paths. Vous devez vous assurer que votre dossier lib/ est inclus, comme dans

config.plugin_paths = [ "# {RAILS_ROOT}/lib/plugins", "# {RAILS_ROOT}/fournisseur/plugins"]

En plus de config.plugin_paths, vous pouvez également nommer les plugins qui doivent être chargés dans config.plugins. Si cette variable contient :all alors tous les plugins (trouvés) seront chargés.

(Soit dit en passant: les paramètres de configuration égale soit l'environnement doit aller config/environment.rb Les différences entre enviroments sont dues à des paramètres dans les fichiers .rb respectifs..)