代码之家  ›  专栏  ›  技术社区  ›  Craig Walker

未加载application_controller.rb

  •  0
  • Craig Walker  · 技术社区  · 15 年前

    在我的Rails应用程序(运行在Rails 2.3.5和ruby 1.8.7上)中,当 config.cache_classes = false 在environment.rb中。

    在装载路径上。如果我加上 require 'application_controller' 到environment.rb或set的末尾 cache_classes = true ,则应用程序运行正常。

    当类没有被缓存时,为什么它不加载?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Ben Lee    15 年前

    这听起来像是因为某些原因,你的应用程序仍在使用2.3.2 gems ActiveSupport . 可能还在找 application.rb ,以及未定义的 pretty_inspect 也会导致版本控制问题。

    首先,确保你的顶部没有这样的东西 environment.rb :

    RAILS_GEM_VERSION = '2.3.2'
    

    若你们不知道,在你们的底部 环境.rb 通过添加以下内容找出是否有其他设置错误:

    puts RAILS_GEM_VERSION
    
        2
  •  1
  •   Ben Lee    15 年前

    应用程序代码作为 Rails::Initializer.run 方法在environment.rb中。这几乎是最后一步了。我不知道什么会阻止应用程序控制器加载——我唯一的建议是确保文件名中没有输入错误 /app/controllers/application_controller.rb 并确保类定义中没有输入错误 class ApplicationController < ActionController::Base .

    我想补充一点,我最后一条评论的第一部分适用于生产模式,在生产模式中,类被急切地加载到 Rails::Initializer#load_application_classes ,但在开发模式下,它不缓存类,因此将它们作为const_missing catcher每个请求的一部分加载。见 ActiveSupport::Dependencies#load_missing_constant .

        3
  •  1
  •   Ben Lee    15 年前

    我有另一个主意。你提到它在加载路径中,但我稍后会确认它仍在加载路径中,插件不会把它弄乱。在最底层 environment.rb (最后一行)添加此行:

    puts ActiveSupport::Dependencies.load_paths.pretty_inspect

    然后运行 script/server 从命令行查看加载路径,确保 /path_to_your_rails_app/app/controllers 出现了。

        4
  •  0
  •   Craig Walker    15 年前

    这个问题肯定与 config.cache_classes = false ;如果我把这个换成 true 然后问题就消失了。

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