【问题标题】:A copy of MyModel has been removed from the module tree but is still activeMyModel 的副本已从模块树中删除,但仍处于活动状态
【发布时间】:2015-01-31 00:37:29
【问题描述】:

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

MyModel 的副本已从模块树中删除,但仍然存在 活跃!

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

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

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

这让我发疯了,因为我对如何解决它没有更多的想法。与此同时,生产力已经一落千丈。

我怎样才能找到它的来源?

【问题讨论】:

    标签: ruby ruby-on-rails-4.1


    【解决方案1】:

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

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

    【讨论】:

    • 至少对我来说,在我使用 wtf??? 命令之前,我在 pry 中没有看到太多堆栈跟踪。
    【解决方案2】:

    我遇到了同样的问题。基本上,它是由 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
    

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 2011-11-28
      • 2013-09-24
      • 2015-06-20
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多