MyModel的副本已从模块树中删除但仍处于活动状态

时间:2015-01-31 00:37:30

标签: ruby ruby-on-rails-4.1

每当我更改任何代码(视图和某些控制器除外)时,我都会得到:

  

MyModel的副本已从模块树中删除但仍然是   活性!

我必须重启我的开发服务器。

我已就此问题梳理了互联网,最常见的根本原因是从某些未自动加载的类调用MyModel.some_method。我的lib课程类似于MyModel.findMyModel.some_scope;但是,我已经将Rails配置为自动加载lib树中的每个文件。我甚至配置了所有内容的自动加载功能,包括app甚至config下的所有文件。

可能相关的一个事实是MyModel是STI层次结构的基础。它有两个孩子,一个有孩子。

这让我很疯狂,因为我对如何排除故障没有更多的想法。与此同时,生产力已经下降到了地狱。

我如何找到这个来源?

2 个答案:

答案 0 :(得分:2)

这意味着您的应用仍然引用了旧版本。我认为应该从堆栈跟踪中看到它被引用的确切位置。

另外,不要将lib添加到自动加载中,如果它本来是自动加载的话。我不知道这个型号是什么,但可能你应该把它放到app / services或app / models中(无论它是否是ActiveRecord)。

答案 1 :(得分:1)

我遇到了同样的问题。基本上,当Rails尝试重新加载时,它是由旧引用引起的,很可能发生在嵌套模块/类中,如下所示:

module A
  def self.b
    B
  end
end

class C
  def d
    @d ||= D.new
  end
end

您需要将其更新为:

module A
  def self.b
    self::B # or A::B
  end
end

class C
  def d
    @d ||= C::D.new
  end
end

因此,在您的情况下,NestedModuleOrClass下的每个模块/类MyModel都需要更新为MyModel::NestedModuleOrClass

试试这个,让我知道它是否适合你。