Estoy trabajando en un motor para Rails como un complemento. Me gustaría poder realizar los cambios necesarios en la configuración de Rails cuando esté cargada, de modo que pueda especificar sus dependencias Gem así como agregar algunas rutas de carga.¿Cómo puedo modificar la configuración de Rails dentro de un complemento de motor?
El archivo init.rb del complemento tiene acceso al objeto config, pero esto es efectivamente de solo lectura, puede especificar una gema pero no importa, el inicializador debe haberse ejecutado ya en este punto.
Tengo todo esto por ahora, al exigir un archivo con un nuevo bloque de rieles :: inicializador de este modo:
Rails::Initializer.run do |config|
config.gem "authlogic", :version => ">= 2.0.9"
# etc
end
Esto funciona, pero elimina cualquier configuración existente en environment.rb de la aplicación principal.
Tal vez puedo resolver esto teniendo un generador en el motor que agrega algo a environment.rb que carga la configuración del complemento en el escenario correcto, o tal vez hay una forma de agregar un archivo a config/initializers para hacer esto trabajo. Sin embargo, no estoy seguro de cuál es la mejor manera de hacerlo.
Eso suena como una buena aproximación a mí. A diferencia de los archivos de configuración en entornos (desarrollo.rb, etc.) los archivos en config/initializers no tienen acceso al objeto config, ¿sabes por casualidad cómo especificaría las dependencias gem en esta situación? Gracias – DavidNorth
Hasta ahora, la única forma en que puedo resolver esto es cargar un archivo de mi motor como una cadena y evaluarlo desde el bloque Rails :: Initializer en environment.rb para que el archivo tenga acceso a 'config 'y poder llamar a config.gem eval (File.read ("# {RAILS_ROOT} /vendor/plugins/my-engine/config/gems.rb")) Esto es muy feo, pero parece que no puede especificar dependencias de gemas fuera de ese bloque. Supongo que mi generador podría simplemente agregar las líneas relevantes dentro de ese bloque, pero me gustaría mantener los requisitos del motor lo más separados posible. – DavidNorth