application_controller.rb未加载

时间:2010-11-16 17:06:39

标签: ruby-on-rails ruby

在我的Rails应用程序(在rails 2.3.5上运行,ruby 1.8.7)中,我的application_controller.rb文件在environment.rb中config.cache_classes = false时没有自动加载。

它在加载路径中。如果我将require 'application_controller'添加到environment.rb的末尾或设置cache_classes = true,那么应用就可以了。

为什么在课程没有被提升时它会加载?

4 个答案:

答案 0 :(得分:1)

应用程序代码作为environment.rb中Rails::Initializer.run方法的一部分加载。这几乎是最后一步。我知道什么都不会阻止应用程序控制器加载 - 我唯一的建议是确保文件名/app/controllers/application_controller.rb中没有拼写错误,并确保类定义中没有拼写错误{{1 }}

我想补充一点,我的上一条评论的第一部分适用于生产模式,其中类在class ApplicationController < ActionController::Base中急切加载,但在开发模式下它不会缓存类,因此将它们作为一部分加载每个请求的const_missing捕手请参阅ActiveSupport::Dependencies#load_missing_constant

答案 1 :(得分:1)

我有另一个想法。你提到它在加载路径中,但我稍后会确认它保留在加载路径中,并且插件不会搞乱它或其他东西。在environment.rb(最后一行)的最底部添加以下行:

puts ActiveSupport::Dependencies.load_paths.pretty_inspect

然后从命令行运行script/server并查看加载路径,确保显示/path_to_your_rails_app/app/controllers

答案 2 :(得分:1)

听起来好像是因为某些原因你的应用仍在使用ActiveSupport的2.3.2宝石。它可能仍然在寻找application.rb,未定义的pretty_inspect也适用于版本控制问题。

首先,请确保environment.rb顶部没有这样的内容:

RAILS_GEM_VERSION = '2.3.2'

如果你不这样做,那么在environment.rb的底部,通过添加以下内容找出其他内容是否错误:

puts RAILS_GEM_VERSION

答案 3 :(得分:0)

问题肯定与config.cache_classes = false有关;如果我将其切换到true,那么问题就会消失。

(感谢@Ben Lee带领我走向这个)