2011-03-09 7 views
6

Tengo una aplicación de rieles que usa omniauth para autenticar a los visitantes a través de Facebook.¿Cómo configurar las claves de autenticación de Facebook dependiendo del entorno?

Cuando registra una aplicación en Facebook, debe registrar una url de devolución de llamada a la que se redireccionarán una vez que hayan completado su proceso de autenticación.

Dado que mi sitio de producción está alojado en un servidor diferente de mi entorno de desarrollo, necesito registrar 2 URL diferentes con Facebook. Lo hice registrando dos aplicaciones, una en vivo y una versión dev.

Ahora, por supuesto, tengo dos app_ids y dos app_secrets que mi aplicación Rails necesita usar.

¿Cómo configuro OmniAuth para utilizar un juego de llaves en el entorno de desarrollo y otro en producción?

He tratado de establecer mis llaves en el directorio/config/entornos de este modo:

# development.rb 
SampleApp::Application.configure do 
    config.omniauth_keys.facebook.app_id = "32423423" 
    config.omniauth_keys.facebook.api_key = "324234324234324" 
    config.omniauth_keys.facebook.app_secret = "242343424234324324234324" 
end 

# production.rb 
SampleApp::Application.configure do 
    config.omniauth_keys.facebook.app_id = "7657566" 
    config.omniauth_keys.facebook.api_key = "7756765765756757" 
    config.omniauth_keys.facebook.app_secret = "65756767567567567757" 
end 

y luego en /config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do 
    keys = SampleApp::Application.config.omniauth_keys 

    # ==> OmniAuth Provider Credentials 
    #     APP_ID    SECRET_ID 
    provider :facebook, keys.facebook.app_id, keys.facebook.app_secret 
end 

pero consigo

`method_missing': undefined method `omniauth_keys' 

cuando trato de iniciar el servidor de desarrollo, supongo porque omniauth.rb se carga antes/emviro nments/*?

¿Cómo puedo configurar esto?

Editar: Aquí hay un mensaje de error más detallado

=> Booting WEBrick 
=> Rails 3.0.4 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
Exiting 
/home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/railtie/configuration.rb:77:in `method_missing': undefined method `omniauth_keys' for #<Rails::Application::Configuration:0xadaa69c> (NoMethodError) 
    from /home/david/sites/sample_app/config/environments/development.rb:32:in `block in <top (required)>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/application.rb:47:in `class_eval' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/application.rb:47:in `configure' 
    from /home/david/sites/sample_app/config/environments/development.rb:1:in `<top (required)>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `require' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `block in require' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:225:in `block in load_dependency' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:596:in `new_constants_in' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:225:in `load_dependency' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `require' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/application/bootstrap.rb:11:in `block in <module:Bootstrap>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/initializable.rb:25:in `instance_exec' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/initializable.rb:25:in `run' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/initializable.rb:50:in `block in run_initializers' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/initializable.rb:49:in `each' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/initializable.rb:49:in `run_initializers' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/application.rb:134:in `initialize!' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/application.rb:77:in `method_missing' 
    from /home/david/sites/sample_app/config/environment.rb:5:in `<top (required)>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `require' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `block in require' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:225:in `block in load_dependency' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:596:in `new_constants_in' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:225:in `load_dependency' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/activesupport-3.0.4/lib/active_support/dependencies.rb:239:in `require' 
    from /home/david/sites/sample_app/config.ru:3:in `block in <main>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/builder.rb:46:in `initialize' 
    from /home/david/sites/sample_app/config.ru:1:in `new' 
    from /home/david/sites/sample_app/config.ru:1:in `<main>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/builder.rb:35:in `eval' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/builder.rb:35:in `parse_file' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/server.rb:162:in `app' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/server.rb:248:in `wrapped_app' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/rack-1.2.1/lib/rack/server.rb:213:in `start' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands/server.rb:65:in `start' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands.rb:30:in `block in <top (required)>' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands.rb:27:in `tap' 
    from /home/david/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.4/lib/rails/commands.rb:27:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 

Respuesta

17

En /config/initializers/omniauth.rb

if Rails.env.production? 
    # set the app parameter 
elsif Rails.env.development? 
    # set the app parameter 
else 
    # test env 
    # set the app parameter 
end 

Nota: Rails.env.production? es un método Rails 3. Creo que para las versiones 2.x es posible que tengas que usar RAIL [ENV] o algo así.

+0

Eso parece haber funcionado muy bien. ¡No puedo creer que no haya pensado en eso, señor! Gracias. –

Cuestiones relacionadas