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

时间:2017-07-26 18:15:08

标签: ruby-on-rails ruby rubygems

我正在制作一个红宝石宝石,我们称之为 Radin 。它用在Rails项目中。有一个安装过程通过运行config/initializers/radin.rb来创建rails generate radin:install

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

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

发电机按预期工作(如上所示)。在我的宝石中,我关注了两个链接MyGem.configure BlockConfig and Generators in Gems

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

/ EXE /雷丁

#!/usr/bin/env ruby

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

puts "Output: #{output}"

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

/lib/radin/documentor.rb

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

最后我有Radin模块和Configuration

/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

当我在test rails应用程序目录中运行$ radin时,尽管在config/initializers/radin.rb中设置了配置选项,但仍会出现错误。

  

... / radin / lib / radin / documentor.rb:8:在test_configuration': undefined method选项'中为nil:NilClass(NoMethodError)

尝试过&amp;失败 我试图将模块更改为始终具有默认设置,但是尽管更改了初始化程序中的配置,但选项永远不会从'default_option'更改。

module Radin

  class << self
    attr_accessor :configuration
  end

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

  def self.configure
    yield(configuration)
  end

  ...

1 个答案:

答案 0 :(得分:1)

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

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

现在一切似乎都正常了。