0

我正在向我的 rails 应用程序添加一个可安装的引擎,它提供了类似论坛的功能(即添加问题、答案、评论等)。在开发中一切正常。但是,在登台/制作中,我在尝试创建答案时遇到错误,特别是 CanCan 权限错误(尽管我认为这可能是一个红鲱鱼)。但感觉 ti 可能与命名空间或名称冲突有关?

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

我从这里去哪里?如何确定需要重新加载哪些类?处理这个问题的常规方法是什么?

我正在使用 Rails 3.1。

4

1 回答 1

3

我解决了这个问题。这是引导顺序的问题。我Engine::AnswersControllerEngine::ApplicationController. 在我的代码中,我只是继承自ApplicationController. 这意味着,因为Engine::AnswerController不知道Engine::ApplicationController它错误地继承自主应用程序ApplicationController而不是引擎的ApplicationController.

修复方法是通过明确引擎命名空间来强制答案控制器从引擎而不是主应用程序继承:

Engine::AnswersController < Engine::ApplicationController

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

此外,如果问题与引擎相关,您可能需要在引擎和主应用程序中都放置调试器。调试引擎可能很困难,因为引擎中发生的错误可能不一定会冒泡到主应用程序。

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

于 2011-10-26T18:38:10.063 回答