我正在尝试为自定义库制作自己的初始化程序,并且我已经以与在 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.token_lifetime
都是正确的,但对于我自己的模块并不总是正确的,有时是nil
,有时是初始化程序中设置的值。这是代码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
是nil
. 另外,我认为 Knock 也是一个 Rails 引擎(我不确定,我从未尝试过创建自己的引擎),但我不知道这是否会影响模块初始化程序的工作方式。
我的问题是:有人知道为什么我自己的模块在使用 时表现得很奇怪rails c
,而 Knock 完全没问题,我怎样才能让我自己的模块按预期工作。