2010-05-20 8 views
5

Tengo una clase ubicada dentro de la carpeta RAILS_ROOT/lib, que uso en uno de mis ayudantes, y funciona muy bien en el desarrollo.Rieles: ¿por qué un modelo dentro de RAILS_ROOT/lib no estaría disponible en el modo de producción?

Cuando cambio a la producción, la aplicación emite un NameError (uninitialized constant SomeHelper::SomeClass), y tengo que cargarlo manualmente en el helper:

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

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

que estaba bajo la impresión de que todo el interior RAILS_ROOT/lib/* debe estar disponible Todo a la aplicación. ¿Hay algo que necesite configurar para que esto suceda en el modo prod? Gracias.

Respuesta

1

Cuando se llama a SomeHelper :: SomeClass, el mecanismo de carga automática de Rails intentará cargar el archivo en lib/some_helper/some_class.rb

rieles no se puede cargar todo en lib/*, un viaje de solo tratar de cargar archivos cuando se produce ConstMissing.

1

Puede que necesite comprobar las diferencias entre las configuraciones de configuración entre desarrollo y entorno de producción: config/environments/production.rb y config/environments/development.rb.

Durante la rutina de inicialización de Rails, se llama load_plugins() que carga todos los complementos en config.plugin_paths. Es necesario asegurarse de que la carpeta de lib/ se incluye, como en

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

Además de config.plugin_paths, también puede nombrar los complementos que deben cargarse en config.plugins. Si esa variable contiene :all, se cargarán todos los complementos (encontrados).

(Por cierto: la configuración de los ajustes igual a cualquier entorno debe ir en config/environment.rb Cualquier diferencia entre ambientes se deben a ajustes en los respectivos archivos .rb..)

Cuestiones relacionadas