2011-04-09 6 views
6

Tengo un motor de rieles 3. En el inicializador requiere un grupo de archivos de alguna carpeta. En este usuario archivo de mi motor define el código, la lógica de negocio, configura motor, etc .. Todos estos datos se almacenan de forma estática en mi módulo principal del motor (en el atributo de aplicación)Rails 3 motor y recarga de código en modo de desarrollo

module MyEngine 
    class << self 
    def application 
     @application ||= MyEngine::Application.new 
    end 
    end 
end 

Quiero este archivos sean recargados en cada solicitud en modo de desarrollo. (Para que el usuario no tiene que recargar servidor para ver los cambios que acaba de hacer) Por supuesto que puedo hacer algo como esto en vez de inicializador

config.to_prepare do 
    MyEngine.application.clear! 
    load('some/file') 
end 

Pero de esta manera voy a tener problemas (debido a las constantes definidas en este archivo no se volverá a cargar realmente).

La solución ideal sería hacer todo mi motor recargable en cada solicitud, pero no he encontrado la manera de hacerlo.

+1

¿Miraste http://stackoverflow.com/questions/4713066/plugin-reload-with-each-request-rails-3? – apneadiving

+0

Me pregunto por qué todo en esta pregunta está recibiendo un voto negativo ... – Kris

+0

Ver http://stackoverflow.com/questions/22463012/how-can-i-automatically-reload-gem-code-on-each-request-in -development-mode-in-r/22463013 # 22463013 – aceofspades

Respuesta

1

Es una vieja pregunta, pero creo que agregar ActiveSupport::Dependencies.explicitly_unloadable_constants += %w[ GemName ] a su development.rb debería hacer el truco.

+0

No funcionó. (Intentó con Rails 3.2.2 y rails_admin.) –

0

¿Ha intentado convertir reload_plugins?

# environments/development.rb 
config.reload_plugins = true 
+1

Parece que no funciona (utilizando Rails 3.2.3). –

0

Es un poco de truco, pero utilizando require_dependency y simplemente volver a abrir la clase podría funcionar?

# app/models/project.rb 

require_dependency File.join(MyEngine::Engine.root, 'app', 'models', 'project') 
class Project 
end 
0

Para aquellos que están trabajando en vistas motor o sólo traducciones I18n: Las partes están autoreloaded por defecto, no es necesario reiniciar el servidor!

Cuestiones relacionadas