我正在尝试为自定义lib创建自己的初始化程序,并且我已经完成了与在knock gem中完成相同的主要内容,这是模块:
https://github.com/nsarno/knock/blob/master/lib/knock.rb
以及这里的初始化程序: https://github.com/nsarno/knock/blob/master/lib/generators/templates/knock.rb
所以我的代码完全相同,但具有不同的模块名称和属性名称。
但它的工作方式有所不同。无论何时我运行rails c
,在knock初始值设定项中设置的Knock.token_lifetime
的自定义值都是正确的,但对于我自己的模块来说,同样的情况并不总是正确的,有时它是nil
,有时候它是&{ #39; s初始值设定项中设置的值。
这是lib/my_module.rb
module MyModule
mattr_accessor :some_attr
self.some_attr = nil
# Default way to setup MyModule.
def self.setup
yield self
end
end
以下是config/initializers/my_module.rb
MyModule.setup do |config|
config.some_attr = 'some_val'
end
我注意到当我更改my_module初始化程序中的一些代码并运行rails c
时 - 一切都很好,但当我更改其他文件并运行rails c
时,MyModule.some_attr
为{{ 1}}。
另外,我认为Knock也是一个rails引擎(我不确定,我从未试图创建自己的引擎),但我不知道这是否会影响模块初始化程序的工作方式。
我的问题是:有人知道为什么我自己的模块对nil
表现得很奇怪,而Knock完全没问题,我怎样才能使我自己的模块按预期工作。