在gem中访问配置

时间:2014-06-18 14:22:11

标签: ruby-on-rails ruby ruby-on-rails-4 gem

我正在尝试为我的公司构建一个gem,它将记录可以放入整个公司的任何rails应用程序的统计数据。作为这个gem的一部分,我需要启动一个statsd客户端并将其分配给一个全局变量。所以现在它看起来像这样:

$stats =  Statsd.new('127.0.0.1', 8125).tap{|sd| sd.namespace = 'some_hard_coded_namespace'}

目前我在我的主gem文件的底部有这个,所以它在启动时被调用,并且可供rails应用程序用来开始记录数据。我的问题是我希望能够在配置中指定它而不是硬编码到gem中。我的第一个想法是做这样的事情:

def get_namespace
  return Rails.application.config.stats_logging_namespace
rescue Exception => e
  return Rails.application.class.to_s.split("::").first.underscore.dasherize
end

但由于gem在config/application.rb之前加载,我实际上无法访问这些变量。是否有允许用户为gem配置变量的正确方法?例如,可能在yaml文件中?

1 个答案:

答案 0 :(得分:1)

配置gem的标准方法是在应用程序中使用gem的初始化程序。

配置/初始化/ my_gem.rb:

MyGem.configure do |config|
  config.namespace = 'the_namespace'
end

有关如何在gem中实现配置API的示例,请参阅此答案: How to use ActiveSupport::Configurable with Rails Engine