0

実行中のアプリケーションの構成情報に依存する ruby​​ gem を作成しています。

このソートボットの記事 またはこのスタック オーバーフローの質問に基づいて、パターンをたどろうとしています。

外側のアプリの構成/初期化データが読み込まれることがわかりますが、問題は、初期化設定が宝石によって取得される前に実行されるその初期化子に依存するコードがあることです。

初期化データがタイムリーにロードされることを保証するにはどうすればよいですか?

これが私の設定/初期化コードです:

MbSharedScoreboard.configure do |config|
   config.foo = "bar"
end

ここでは、gem でデータを読み取る順序を示します。

require "mb_shared_scoreboard/configuration"
require "mb_shared_scoreboard/version"
require "mb_shared_scoreboard/models/service"
require "mb_shared_scoreboard/models/subject"
require "mb_shared_scoreboard/models/foo"

module MbSharedScoreboard

  def self.root
    File.expand_path('../..', __FILE__)
  end

end

これがconfiguration.rbです-最初にロードされたファイル:

module MbSharedScoreboard

  class Configuration
    attr_accessor :foo
    def initialize
      @foo = "foo"
    end
  end

  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield configuration
    puts "startup configuration: #{self.configuration.to_s}"
  end 
end

何か案は?

4

1 に答える 1

0

公式ドキュメントによると、

Rails 自体をロードする前にアプリケーションで何らかのコードを実行する必要がある場合は、config/application.rb の require 'rails/all' の呼び出しの上に配置します。

コンテンツ全体を移動するのではなく、そのファイルをそこに含めるだけで済む場合があります。

于 2012-11-09T06:05:45.077 に答える