在Rails应用程序中使用Ruby gem中使用可配置变量的正确方法是什么?我们在这个例子中使用时区,它可能是一个常量,但也会使用特定于安装的变量,如home_city
等。
常量
可以在初始化程序中设置常量:
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
环境变量:我们不希望在gem本身中使用环境变量。我们想避免
self.tz = "#{ENV['TIMEZONE']} Time zone"
其他
答案 0 :(得分:0)
执行此操作的最佳方法是使用ActiveSupport::Configurable
module。
使用此模块,您可以创建如下配置文件:
<强> /config/initializers/my_gem.rb 强>
MyGem.config do |config|
config.timezone = 'BRT'
end
This answer也很有用。