1

我正在尝试为自定义库制作自己的初始化程序,并且我已经以与在 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_attrnil. 另外,我认为 Knock 也是一个 Rails 引擎(我不确定,我从未尝试过创建自己的引擎),但我不知道这是否会影响模块初始化程序的工作方式。

我的问题是:有人知道为什么我自己的模块在使用 时表现得很奇怪rails c,而 Knock 完全没问题,我怎样才能让我自己的模块按预期工作。

4

0 回答 0