在Ruby Gem中使用变量
问题描述:
在Rails应用程序中使用Ruby gem中的可配置变量的正确方法是什么?我们使用时区在这个例子中这很可能是一个常数,但也将使用安装特定的变量,如home_city
等在Ruby Gem中使用变量
-
常量
可以在初始化设置常数: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
-
配置变量
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
-
环境变量:我们宁愿在宝石本身不使用环境变量。我们想避免
self.tz = "#{ENV['TIMEZONE']} Time zone"
其他
答
做到这一点,最好的办法是用ActiveSupport::Configurable
module。
有了这个模块,你可以创建这样一个配置文件:
/config/initializers/my_gem.rb
MyGem.config do |config|
config.timezone = 'BRT'
end
This answer可有用了。