在初始化器中找不到自己的配置块方法

Own configure block method not found in initializer

我正在尝试根据以下内容为我的 lib 代码进行自己的配置: https://robots.thoughtbot.com/mygem-configure-block

lib/imodule/imodule.rb:

module Imodule
  class << self
    attr_accessor :configuration
  end

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

  class Configuration
    attr_accessor :api_key
    attr_reader :api_url

    def initialize
      @api_url = 'https://api.test.com'
    end
  end
end

initializers/imodule.rb:

Imodule.configure do |c|
  c.api_key = '4db6-93b3'
end

但我得到:

/home/user/Documents/Projects/imodule/config/initializers/imodule.rb:2:in <top (required)>': undefined methodconfigure' for Imodule:Module (NoMethodError)

您发布的代码没有任何问题,前提是 lib/imodule/imodule.rb 中的代码在 config/initializers/imodule.rb 中被调用之前未被加载。

看起来这是在一个名为 imodule 的 Rails 应用程序中,因此 Imodule 被定义为应用程序模块,这解释了为什么你只有一个 NoMethodError当您的模块代码未加载时,而不是 NameError

Rails 不会自动要求 lib 目录中的文件,因此在文件顶部添加 require 'imodule/imodule' 将解决问题。