访问类实例变量会间歇性地失败

时间:2012-01-09 17:55:58

标签: ruby-on-rails-3.1

我正在同时处理Rails引擎和主机应用程序。我正在尝试为主机应用程序提供一种方法,以便为其中一个引擎控制器提供代码块,它将在特定时间调用。

主机应用程序有一个config/initializers文件,其中包含:

MyEngine::TheController.add_doc_hook(:some_key) do
  # Some code to execute
end

...在引擎的控制器中,我调用了一个特定的钩子(如果它提供的话):

def update
  # some code...

  run_doc_hook(:some_key)

  # more code...
end

以下是引擎控制器中的访问方法:

# Getter for the blocks - usually returns correctly but sometimes returns nil
def self.doc_hooks
  @doc_hooks
end

# Setter - called by the host application
def self.add_doc_hook(name, &block)
  @doc_hooks ||= {}
  @doc_hooks[name] = block
end

这是运行给定钩子的方法:

protected

# Run pre-set hooks, which can be specified by the host application
def run_doc_hook(name, *args)
  hooks = self.class.doc_hooks # HERE - this is sometimes nil
  if hooks && hooks.has_key?(name) && hooks[name].respond_to?(:call)
    hooks[name].call(*args)
  end
end

如您所见,我将提供的代码块保存在类实例变量中。访问它们可能很好,可能有5个请求中的4个,但间歇性失败:访问者返回nil。我无法弄清楚为什么会这样。

有人能看出问题所在吗?

0 个答案:

没有答案