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

时间:2009-08-07 02:14:14

标签: ruby rubygems ruby-on-rails-plugins ruby-on-rails-2

每当两个并发HTTP请求转到我的Rails应用程序时,第二个总是返回以下错误:

  

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

从那里它给出了一个无益的堆栈跟踪到“我们经历了标准服务器的东西,在ApplicationController上运行你的第一个before_filter (我检查了;它只是先运行哪个过滤器)” ,然后提供以下内容:

  

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:414:in   `load_missing_constant'

     

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:96:in   `const_missing'

我假设它是一个通用的答案,并没有真正说太多。

谷歌似乎告诉我,开发Rails引擎的人会遇到这种情况,但我不这样做。我所做的就是将我的Rails应用程序从2.2(2.1?)升级到2.3。

导致此错误的可能原因是什么,以及如何跟踪实际发生的情况?我知道这个问题含糊不清,其他任何信息都有帮助吗?

更重要的是:我刚刚尝试在“生产”环境中进行测试运行,但错误似乎并未持续存在。那么这只会影响发展吗,我不需要太担心吗?

6 个答案:

答案 0 :(得分:8)

这是Rails 2.3.3中的一个错误:

在2-3稳定中有一个补丁(但不完整?):

您可以通过以下几种方式解决问题:

  • 恢复到Rails 2.3.2 ,等待2.3.4出现,可能是在8月底。 2.3.3有一些不好的问题,所以这可能是最好的。
  • 问题不应该发生在生产模式中,也不会发生在Thin服务器下的开发模式中。如果您在生产模式下的Google Engines上遇到此问题,那么该修补程序是您唯一的希望。如果它仅在开发模式下,您可以使用Thin而不是Mongrel运行本地服务器。
  • 如果是Google Engines,您可以离开Goog​​le引擎并以其他方式托管您的应用。这似乎很多工作。

祝你好运,这是很多人遇到的一个非常糟糕的错误。

答案 1 :(得分:1)

除了其他答案中提到的变通方法之外,我还遇到了另外两个:

  1. 将“config.cache_classes = false”添加到config / environments / development.rb文件中。这会产生令人遗憾的副作用,要求您在想要查看更改时重新启动服务器。
  2. 在引擎的控制器类中添加“unloadable”。请参阅http://strd6.com/?p=250http://dev.rubyonrails.org/ticket/6001
  3. 我没有尝试过第二种方法,因为我首先找到了另一种解决方案,但是当然需要在避免编辑插件代码之间进行权衡,如果下载了较新版本的插件,可能会将其恢复,然后通过不必在第二个解决方案中一直重新启动开发服务器来提供开发的便利性。

答案 2 :(得分:1)

我在rails 2.3.4上面对我的新引擎遇到了同样的问题,我找到了解决方案here

调用unloadable方法解决了我的问题。

答案 3 :(得分:0)

怪异。

尝试运行“rake rails:update”以确保配置是脚本是最新的。您可能必须根据模板应用程序检查现有的。

答案 4 :(得分:0)

我有这个错误,从记忆中它是修复它的这三件事之一。

1)我需要更新mongrel / rack 2)我有一个来自restful身份验证的环境变量,我已经从environment.rb转移到production.rb和development.rb文件中 - 将其转移回environment.rb似乎有帮助 3)will_paginate已过期

答案 5 :(得分:0)

我们在命名空间模块中调用了一个activerecord模型,该模型覆盖了“name”类方法。 Rails期望name方法返回Product :: Categories :: MilkProducts :: Firstproduct但只获得Firstproduct并抛出错误。因此,如果您收到此错误,请首先检查您是否重新定义了self.name。

  • Firstproduct.method(:name).owner应该是Module
  • Firstproduct.method(:名称).source_location

源:

module Product::Categories::MilkProducts
  class Base
    def self.name
      self.to_s.demodulize
    end
  end
  class Firstproduct < Base
    self.product = Product.first
  end
end