将' cache_classes '设置为' false '修复了我的错误.下一步该做什么?



我正在为我的rails应用程序添加一个可安装的引擎,它提供了一个类似论坛的功能(即添加问题,答案,评论等)。在开发过程中一切都很顺利。然而,在登台/生产,我得到一个错误时,试图创建一个答案,特别是一个CanCan权限错误(虽然我认为这可能是一个转移注意力)。但感觉这可能与名称空间或名称冲突有关?

无论如何,当我在环境配置文件中设置config.cache_classes = false时,这个问题就消失了。但这不是一个可接受的解决方案,因为它确实减慢了速度。

我该往哪里走?我怎样才能知道哪些类需要重新加载?处理这个问题的传统方法是什么?

我使用的是Rails 3.1

我找到了问题所在。这是启动顺序的问题。Engine::AnswersControllerEngine::ApplicationController之前加载。在我的代码中,我只继承了ApplicationController。这意味着,由于Engine::AnswerController不知道Engine::ApplicationController,它错误地继承了主应用程序的ApplicationController而不是引擎的ApplicationController

修复方法是通过显式设置引擎命名空间来强制answers控制器继承引擎而不是主应用:

Engine::AnswersController < Engine::ApplicationController

我知道这个问题对我的应用程序来说是相当特殊的,但是我如何得到解决方案可能对其他人有帮助。如果您面临这种类型的问题,请下拉到某种类型的调试器(我使用的是Pry)并开始检查。具体来说,检查加载了哪些类,并仔细查看继承链(即Engine::ApplicationController.ancestors)。寻找任何看起来奇怪的东西

如果问题与引擎相关,你可能需要在引擎和主应用中同时放置调试器。调试引擎可能很困难,因为引擎中发生的错误不一定会出现在主应用中。

非常感谢tjbladez帮我解决这个问题。

相关内容

  • 没有找到相关文章

最新更新