2010-05-20 10 views
5

Ho una classe che si trova all'interno della cartella RAILS_ROOT/lib, che uso in uno dei miei aiutanti e che funziona benissimo nello sviluppo.Rails: perché un modello all'interno di RAILS_ROOT/lib non è disponibile in modalità produzione?

Quando si passa alla produzione, l'applicazione genera un NameError (uninitialized constant SomeHelper::SomeClass), e devo caricare manualmente nella helper:

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

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

Ho avuto l'impressione che tutto all'interno RAILS_ROOT/lib/* dovrebbe essere disponibile tutto per l'app - c'è qualcosa che devo configurare per farlo accadere in modalità prod? Grazie.

risposta

1

Quando si chiama SomeHelper :: SomeClass, meccanismo di caricamento automatico Rails' cercherà di caricare il file in lib/some_helper/some_class.rb

Rails non verrà caricato tutto in lib/*, sarà solo provare a caricare file quando si verifica ConstMissing.

1

Potrebbe essere necessario verificare le differenze tra le impostazioni di configurazione tra lo sviluppo e l'ambiente di produzione: config/environments/production.rb e config/environments/development.rb.

Durante la routine di inizializzazione Rails, viene chiamato load_plugins() che carica tutti i plug-in in config.plugin_paths. È necessario assicurarsi che la cartella lib/ è inclusa, come in

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

Oltre a config.plugin_paths, è anche possibile assegnare un nome ai plug-in che devono essere caricati in config.plugins. Se quella variabile contiene :all, verranno caricati tutti i plug-in (trovati).

(A proposito: le impostazioni di configurazione uguale a entrambi gli ambienti dovrebbe andare in config/environment.rb L'eventuale differenza tra ambienti sono a causa delle impostazioni nelle rispettive .rb file..)

Problemi correlati