8

サードパーティで OAuth メカニズムを処理する Rails Engine を開発しています。すべての構成を Struct 属性に入れたいので、すべてのエンジン構成データが一緒に保存されます。

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 がまだ定義されていないため、失敗します。

4

2 に答える 2

7

エンジンで初期化子のロード順序を指定してみてください。アプリケーション構成が実行される前に、強制的にロードできるはずです。イニシャライザをロードしたい時点での推測は次のとおりです

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

それでもうまくいかない場合は、別の初期化子の前にロードしてみてください。

于 2011-05-30T18:09:06.200 に答える
0

ホスト/メインアプリケーションを介してRailsエンジンを構成できます

Railsマウント可能なエンジン内でgemを使用してdevolopment.rb環境内でオブジェクトを初期化する

于 2016-02-26T17:41:06.123 に答える