2011-05-29 10 views
6

Estoy desarrollando un Rails Engine que maneja el mecanismo OAuth con un tercero. Me gustaría tener toda la configuración en un atributo Struct, por lo que todos los datos de configuración del motor se almacena junto:Rails Configuración del motor

require 'rails' 


module ThirdParty 
    class Engine < ::Rails::Engine 

    initializer "third-party.some_init_task" do |app| 
     ThirdPartyConfig = Struct.new(:uri, :client_id, :client_secret, :redirect_uri) 

     app.config.thirdparty = ThirdPartyConfig.new 
     app.config.thirdparty.uri = "https://thirdparty.com" 
     app.config.thirdparty.client_id = "" 
     app.config.thirdparty.client_secret = "" 
     app.config.thirdparty.redirect_uri = "" 
    end 
    end 
end 

Algunos de la configuración debería definirse en los inicializadores nivel de aplicación:

class Application < Rails::Application 

    config.thirdparty.client_id = <valid_client_id> 
    config.thirdparty.client_secret = <valid_client_secret> 
    config.thirdparty.redirect_uri = <redirect_uri> 
end 

Pero como config.thirdparty aún no está definido al cargar el inicializador de la aplicación, falla.

Respuesta

7

Intente especificar el orden de carga para el inicializador en su motor. Debería poder forzarlo a que se cargue antes de que se ejecute la configuración de la aplicación. Aquí es una conjetura en el punto que desea cargar su inicializador

initializer "third-party.some_init_task", :before=> :load_config_initializers do |app| 

Si eso no funciona, intente cargarlo antes de que otro inicializador.

+0

Gracias @cowboycoded !! Cambié los datos de configuración de la aplicación a un inicializador en lugar de escribirlo en application.rb. También he establecido un valor válido para el parámetro: before en Rails Engine como sugirió. Realmente digno de tu ayuda !!! – juandebravo

+0

@juandebravo ¿qué valor le dio a la entrada ': before'? – vemv

-1

Puede configurar el motor rieles a través de host/aplicación principal

Initializing object within devolopment.rb envirorment using gem within rails mountable engine

+0

Tienes una respuesta que resuelve otro problema, ¡genial! Podría ayudar a las personas a mirar otras preguntas, ¡también genial! Lo que debes hacer, entonces, es preguntarte si las _ preguntas_ son duplicados. Si es así, márquelos como tales. Si no son duplicados, tal vez pueda adaptar su otra respuesta para responder específicamente a esta pregunta. De lo contrario, un _comment_ sería la forma más adecuada de proporcionar un marcador de ruta hacia su respuesta. – Mogsdad

Cuestiones relacionadas