自定义ruby gem不遵守配置信息

时间:2012-11-09 05:54:44

标签: ruby-on-rails ruby rubygems

我正在编写一个ruby gem,它依赖于正在运行的应用程序中的配置信息。

我正在尝试遵循基于此this thoughtbot article的模式 或this stack overflow question

我可以看到外部应用程序中的配置/初始化程序数据确实加载了,但问题是,我的代码依赖于在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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据official documentation

  

在极少数情况下,您的应用程序需要先运行一些代码   Rails本身已加载,将其置于要求'rails / all'的调用之上   在config / application.rb。

您可以在那里包含该文件,而不是移动整个内容。