17

每当两个并发 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'

我假设这是一个通用的回应,并没有说太多。

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

此错误的一些可能原因是什么,我该如何追踪到底发生了什么?我知道这个问题很模糊,那么任何其他信息会有所帮助吗?

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

4

6 回答 6

8

这是 Rails 2.3.3 中的一个错误:

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

你有几个选项来解决这个问题:

  • 恢复到 Rails 2.3.2,等待 2.3.4 出来,大概在八月底。2.3.3 有几个不好的问题,所以这可能是最好的。
  • 该问题不应该出现在生产模式下,也不会出现在Thin server下的开发模式下。如果您在生产模式下的 Google 引擎上遇到此问题,那么补丁是您唯一的希望。如果它只是在开发模式下,你可以用 Thin 而不是 Mongrel 运行你的本地服务器。
  • 如果是 Google 引擎,您可以离开 Google 引擎并以另一种方式托管您的应用程序。不过,这似乎需要做很多工作。

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

于 2009-08-07T11:50:39.027 回答
1

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

  1. 将“config.cache_classes = false”添加到您的 config/environments/development.rb 文件中。这具有不幸的副作用,即在您想要查看更改时要求您重新启动服务器。
  2. 在引擎的控制器类中添加“可卸载”。见http://strd6.com/?p=250http://dev.rubyonrails.org/ticket/6001

我没有尝试过第二种方法,因为我首先找到了另一种解决方案,但是在避免编辑插件代码之间当然有一个权衡,如果下载了更新版本的插件,则可能会恢复,然后在第二种解决方案中,不必一直重新启动开发服务器,从而简化了开发。

于 2009-11-05T16:47:05.563 回答
1

我在 rails 2.3.4 上的新引擎遇到了同样的问题,我在这里找到了解决方案。

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

于 2009-11-13T23:25:48.537 回答
0

奇怪的。

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

于 2009-08-07T02:54:45.587 回答
0

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

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

于 2009-08-07T10:13:11.110 回答
0

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

  • Firstproduct.method(:name).owner 应该是 Module
  • Firstproduct.method(:name).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
于 2011-03-29T08:59:20.313 回答