【问题标题】:Using variables in a Ruby Gem在 Ruby Gem 中使用变量
【发布时间】:2015-10-19 16:13:27
【问题描述】:

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

  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. 环境变量:我们不希望在 gem 本身中使用环境变量。我们想避免

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

【问题讨论】:

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


    【解决方案1】:

    最好的方法是使用ActiveSupport::Configurablemodule

    使用此模块,您可以创建如下配置文件:

    /config/initializers/my_gem.rb

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

    This answer 也很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多