加载

时间:2018-01-26 12:22:44

标签: ruby-on-rails ruby-on-rails-5.2

我正在尝试为自定义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完全没问题,我怎样才能使我自己的模块按预期工作。

0 个答案:

没有答案