在我的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
,那么应用就可以了。
为什么在课程没有被提升时它会加载?
答案 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带领我走向这个)