2011-05-29 27 views
6

OAuth mekanizmasını üçüncü taraflarla işleyen bir Rails Engine geliştiriyorum. Bir Struct özelliğinde tüm yapılandırmayı istiyorum, bu yüzden tüm motor yapılandırma veri birlikte depolanır:Raylar Motor yapılandırması

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 

düzenlemenin bazı uygulama düzeyinde başlatıcılar tanımlanmalıdır:

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 

Ancak config.thirdparty, uygulama başlatıcısını yüklerken hala tanımlanmamış olduğu için başarısız oluyor.

cevap

7

Motorunuzdaki başlatıcı için yükleme sırasını belirtmeyi deneyin. Uygulama yapılandırması başlamadan önce yüklemeye zorlamanız gerekir. Buradan o işe yaramazsa, başka başlatıcısı önce yüklemeyi deneyin sizin başlatıcı

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

yüklemek istediğiniz noktada bir tahmin olduğunu.

+0

Teşekkür @cowboycoded konak/ana uygulama üzerinden raylar motorunu yapılandırabilirsiniz !! Uygulama yapılandırma verilerini, application.rb dosyasında yazmak yerine bir başlatıcıya değiştirdim. Ayrıca, Rails Engine'de önerdiğiniz gibi: önce parametresi için geçerli bir değer belirledim. Gerçekten yardımınıza layık! – juandebravo

+0

@juandebravo ': before' girişine hangi değeri verdiniz? – vemv

-1
+0

Başka bir sorunu çözen bir cevabınız var - harika! İnsanların başka sorulara da bakmasına yardımcı olabilir - ayrıca harika! Yapmanız gereken şey, _questions_ kopyaları olup olmadığını kendinize soruyor. Eğer öyleyse, onları böyle işaretleyin. Yinelenmezlerse, diğer cevabınızı bu soruyu özellikle yanıtlamak için özelleştirebilirsiniz. Aksi takdirde, bir _comment_, cevabınıza doğru bir izleyici işareti sağlamanın en uygun yolu olacaktır. – Mogsdad