2011-05-29 112 views
6

我正在開發一個處理與第三方的OAuth機制的Rails引擎。我想有一個結構屬性,所有的配置,因此所有的引擎配置數據存儲在一起:Rails引擎配置

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 

一些配置,應在應用程序級初始化定義:

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 

但是由於config.thirdparty在加載應用程序初始化程序時仍然未定義,所以失敗。

回答

7

嘗試指定引擎中初始化程序的加載順序。您應該能夠在應用程序配置運行之前強制加載它。這是猜測你想要加載初始化程序的點

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

如果不行,請嘗試在另一個初始化程序之前加載它。

+0

感謝@cowboycoded!我已將應用程序配置數據更改爲初始化程序,而不是將其寫入application.rb中。另外,我已經按照你的建議爲Rails Engine中的:before參數設置了一個有效的值。真的值得你的幫助! – juandebravo 2011-06-15 22:26:17

+0

@juandebravo你對':before'入口有什麼價值? – vemv 2013-09-26 06:24:51

-1
+0

你有一個解決另一個問題的答案 - 太棒了!它可能有助於人們查看其他問題 - 也很棒!那麼你應該做的是問問你自己,這些問題是否是重複的。如果是這樣,請將它們標記爲這樣。如果他們不重複,也許你可以定製你的其他答案來專門回答這個問題。否則,_comment_將會是最適合您的答案的方式。 – Mogsdad 2016-02-26 19:17:33