在自己的引擎初始化程序中未定义的方法`configure'

时间:2014-12-10 08:50:46

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

我正在为项目编写引擎,并希望为引擎创建一个初始化器,并为其配置变量。

我认为我只需要写一个这样的初始化器:

MyEngine.configure do |config|
  config.configuration_variable = 1
end

但是当我尝试启动引擎虚拟应用程序时(在虚拟应用程序中复制初始化程序后)我收到此错误:

C:/path_to_app/test/dummy/config/initializers/my_engine.rb:1:in `<top (required)>':
undefined method `configure' for MyEngine:Module (NoMethodError)
from C:/RubyOnRails/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.1.8/lib/active_support/dependencies.rb:241:in `load'

[...]

我的错是什么?我在哪里以及如何定义configure? 最后一个问题:是否有一个很好的教程为引擎编写自己的初始化程序? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这种配置只是分配给类变量的语法糖。

module MyEngine
  class << self
    def configure
      yield self
    end

    attr_accessor :configuration_variable, :configuration_variable2
  end
end

.configure方法只会让自己直接访问类变量。

MyEngine.configure do |config|
  config.configuration_variable  = 1
  config.configuration_variable2 = 2
end

MyEngine.configuration_variable # => 1
MyEngine.configuration_variable2 # => 2

请注意,它实际上只是一种语法,您可以在没有配置块的情况下分配给变量。

MyEngine.configuration_variable = 3