2011-03-09 84 views
6

我有一個rails應用程序,它使用omniauth通過Facebook驗證訪問者。如何根據環境設置Facebook身份驗證密鑰?

當你註冊一個Facebook的應用程序,你必須註冊一個回調url,他們將完成他們的身份驗證過程後將重定向到。

由於我的生產網站託管在與我的開發環境不同的服務器上,因此我需要在Facebook上註冊2個不同的URL。我通過註冊兩個應用程序,一個活的和一個開發版本來完成這個任務。

當然,我有兩個app_ids和兩個app_secrets,這是我的Rails應用程序需要使用的。

如何設置OmniAuth在開發環境中使用一組密鑰並在生產環境中使用另一組密鑰?

我試圖把我的鑰匙在我的/配置/環境目錄,如下所示:

# 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 

,然後在/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 

,但我得到

`method_missing': undefined method `omniauth_keys' 

當我嘗試啓動開發服務器時,我猜測是因爲omniauth.rb在/ emviro之前加載nments/*?

我該如何設置?

編輯:這裏有一個更詳細的錯誤信息

=> 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>' 

回答

17

在/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 

注:Rails.env.production?是一個Rails 3方法。我認爲對於2.x版本你可能需要使用RAIL [ENV]或類似的東西。

+0

這似乎工作得很好。不能相信我沒有想到它myslef!謝謝。 – 2011-03-22 08:41:26