我正在为项目编写引擎,并希望为引擎创建一个初始化器,并为其配置变量。
我认为我只需要写一个这样的初始化器:
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? 最后一个问题:是否有一个很好的教程为引擎编写自己的初始化程序? 谢谢你的帮助!
答案 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