我正在向我的 rails 应用程序添加一个可安装的引擎,它提供了类似论坛的功能(即添加问题、答案、评论等)。在开发中一切正常。然而,在登台/生产中,我在尝试创建答案时遇到错误,特别是 CanCan 权限错误(尽管我认为这可能是一个红鲱鱼)。但感觉 ti 可能与命名空间或名称冲突有关?
无论如何,当我设置 config.cache_classes = false
时,问题就会消失。在我的环境配置文件中。但这不是一个可接受的解决方案,因为它确实会减慢速度。
我从这里去哪里?如何确定需要重新加载哪些类?处理这个问题的传统方法是什么?
我正在使用 Rails 3.1。
最佳答案
我解决了这个问题。这是引导顺序的问题。我的 Engine::AnswersController
在我的 Engine::ApplicationController
之前被加载.在我的代码中,我只是继承自 ApplicationController
.这意味着,由于 Engine::AnswerController
不知道Engine::ApplicationController
它错误地继承自主应用程序的 ApplicationController
而不是引擎的 ApplicationController
.
修复是通过使引擎命名空间显式来强制答案 Controller 从引擎而不是主应用程序继承:
Engine::AnswersController < Engine::ApplicationController
我知道这个问题对我的应用程序来说相当特殊,但我如何找到解决方案可能对其他人有帮助。如果您遇到此类问题,请使用某种类型的调试器(我使用 Pry)并开始检查。具体来说,检查加载了哪些类并仔细查看继承链(即
Engine::ApplicationController.ancestors
)。寻找任何看起来奇怪的东西。此外,如果问题与引擎相关,您可能需要在引擎和主应用程序中放置调试器。调试引擎可能很困难,因为引擎中发生的错误可能不一定会出现在主应用程序中。
非常感谢 tjbladez帮助我解决这个问题。
关于ruby-on-rails - 将 `cache_classes` 设置为 `false` 修复了我的错误。接下来做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7905618/