Gem 的配置未在 Rails 初始化程序中设置

Gem's configuration not being set in Rails initializer

我正在制作一个 ruby gem 我们称它为 Radin。它用于 Rails 个项目。有一个安装过程通过 运行ning rails generate radin:install.

创建 config/initializers/radin.rb

config/initializers/radin.rb(Rails 项目)

Radin.configure do |config|
  # Set this options to what makes sense for you
  config.option = 'test'
end

生成器按预期工作(如上所示)。在我的 gem 中,我关注两个链接 MyGem.configure Block and Config and Generators in Gems.

我有一个可执行文件来检查配置是否已设置。

/exe/radin

#!/usr/bin/env ruby

require 'radin'
output = {}
output["option"] = Radin::Documentor.test_configuration

puts "Output: #{output}"

My Documentor class 只输出我的一个配置选项

/lib/radin/documentor.rb

module Radin
  class Documentor
    def self.test_configuration
      Radin.configuration.option
    end
  end
end

终于有了我的 Radin 模块和 Configuration class

/lib/radin.rb

require "radin/version"
require 'json'

module Radin

  autoload :Documentor, 'radin/documentor'

  class << self
    attr_accessor :configuration
  end

  def self.configure
    self.configuration ||= Configuration.new
    yield(configuration)
  end

  class Configuration
    attr_accessor :option

    def initialize
      @option = 'default_option'
    end
  end
end

当我 运行 $ radin 在测试 rails 应用程序目录中时,尽管在 config/initializers/radin.rb 中设置了配置选项,但我收到错误消息。

.../radin/lib/radin/documentor.rb:8:in test_configuration': undefined methodoption' for nil:NilClass (NoMethodError)

尝试过但失败了 我试图将模块更改为始终具有默认设置,但尽管更改了初始化程序中的配置,但该选项从未从 'default_option' 更改。

module Radin

  class << self
    attr_accessor :configuration
  end

  def self.configuration
    @configuration ||= Configuration.new
  end

  def self.configure
    yield(configuration)
  end

  ...

在我的可执行文件中 radin 我添加了:

begin
  load File.join(Dir.pwd, 'config', 'initializers', 'radin.rb')
rescue LoadError
  puts "Please run `rails generate radin:install` before continuing "
end

现在似乎一切正常。