2015-10-19 43 views
0

在Rails应用程序中使用Ruby gem中的可配置变量的正确方法是什么?我们使用时区在这个例子中这很可能是一个常数,但也将使用安装特定的变量,如home_city在Ruby Gem中使用变量

  1. 常量
    可以在初始化设置常数:

    config/initializer/mygem.rb 
    TIMEZONE = "Eastern Standard" 
    

    但是,如果在类变量声明中使用,则该变量未定义。

    module Foo 
        module Bar 
        class TickTock 
         class_attribute :tz 
         self.tz = "#{TIMEZONE} Time zone" # uninitialized constant Foo::Bar::TickTock::TIMEZONE 
    
  2. 配置变量

    config/initializer/mygem.rb 
    config.x.timezone = "Eastern Standard" 
    
    module Foo 
        module Bar 
        class TickTock 
         self.tz = "#{Rails.configuration.x.timezone} Time zone" # undefined method `configuration` for Foo::Bar::TickTock:Module 
    
  3. 环境变量:我们宁愿在宝石本身不使用环境变量。我们想避免

    self.tz = "#{ENV['TIMEZONE']} Time zone" 
    
  4. 其他

回答

0

做到这一点,最好的办法是用ActiveSupport::Configurablemodule

有了这个模块,你可以创建这样一个配置文件:

/config/initializers/my_gem.rb

MyGem.config do |config| 
    config.timezone = 'BRT' 
end 

This answer可有用了。