2010-05-20 4 views
5

Ich habe eine Klasse im Ordner RAILS_ROOT/lib, die ich in einem meiner Helfer verwende, und es funktioniert hervorragend in der Entwicklung.Schienen - warum sollte ein Modell in RAILS_ROOT/lib nicht im Produktionsmodus verfügbar sein?

Wenn ich auf die Produktion wechseln, löst die Anwendung eine NameError (uninitialized constant SomeHelper::SomeClass), und ich habe es in der Helfer manuell laden:

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

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

Ich hatte den Eindruck, dass alles in RAILS_ROOT/lib/* verfügbar sein sollten Alles in der App - muss ich etwas konfigurieren, um dies im Produktivmodus zu ermöglichen? Vielen Dank.

Antwort

1

Wenn Sie SomeHelper nennen :: Someclass, Rails' Autoloading Mechanismus wird versuchen, Datei auf lib laden/some_helper/some_class.rb

Rails wird nicht alles in lib laden/*, wird es nur versuchen zu laden Dateien, wenn ConstMissing auftritt.

1

Möglicherweise müssen Sie die Unterschiede zwischen den Konfigurationseinstellungen zwischen Entwicklungs- und Produktionsumgebung überprüfen: config/environments/production.rb und config/environments/development.rb.

Während der Rails-Initialisierungsroutine wird load_plugins() aufgerufen, die alle Plugins in config.plugin_paths lädt. Sie müssen sicherstellen, dass Ihre Ordner lib/ enthalten ist, wie in

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

Zusätzlich zu config.plugin_paths können Sie auch die Plugins benennen, die in geladen werden sollen. Wenn diese Variable :all enthält, werden alle Plugins (gefunden) geladen.

(übrigens: Konfiguration gleich Einstellungen in config/environment.rb entweder Umwelt gehen sollte Differenzen zwischen enviroments auf Einstellungen in den jeweiligen .rb Dateien zurückzuführen sind..)

Verwandte Themen