每当我更改任何代码(视图和某些控制器除外)时,我都会得到:
MyModel的副本已从模块树中删除但仍然是 活性!
我必须重启我的开发服务器。
我已就此问题梳理了互联网,最常见的根本原因是从某些未自动加载的类调用MyModel.some_method
。我的lib
课程类似于MyModel.find
和MyModel.some_scope
;但是,我已经将Rails配置为自动加载lib
树中的每个文件。我甚至配置了所有内容的自动加载功能,包括app
甚至config
下的所有文件。
可能相关的一个事实是MyModel
是STI层次结构的基础。它有两个孩子,一个有孩子。
这让我很疯狂,因为我对如何排除故障没有更多的想法。与此同时,生产力已经下降到了地狱。
我如何找到这个来源?
答案 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
。
试试这个,让我知道它是否适合你。