0

저는 포럼과 같은 기능을 제공하는 (예 : 질문, 답변, 댓글 등을 추가하는) 레일 앱에 탑재 가능한 엔진을 추가하고 있습니다. 모든 것이 개발 단계에서 잘 작동합니다. 그러나 스테이징/프로덕션에서는 대답을 만들려고 할 때 오류가 발생합니다. 특히 CanCan 권한 오류가 발생합니다. 그러나 티 페이스가 네임 스페이스 또는 이름 충돌과 관련이있을 수 있다고 생각합니까?`cache_classes`를`false`로 설정하면 내 버그가 수정됩니다. 다음에 무엇을할지?

언제든지 내 환경 구성 파일에 config.cache_classes = false을 설정하면 문제가 해결됩니다. 하지만 실제로는 속도가 느려지므로 수용할만한 해결책은 아닙니다.

여기에서 나는 어디로 가나 요? 어떤 수업을 새로 고침해야하는지 어떻게 알 수 있습니까? 이 문제를 다루는 일반적인 방법은 무엇입니까?

레일 3.1을 사용하고 있습니다.

답변

3

문제점을 파악했습니다. 부팅 순서에 문제가있었습니다. 내 이 내 Engine::ApplicationController 전에로드되고있었습니다. 그리고 내 코드에서, 나는 단지 ApplicationController에서 상속했다. 즉 Engine::AnswerControllerEngine::ApplicationController에 대해 알지 못했기 때문에 엔진의 ApplicationController이 아니라 메인 앱의 ApplicationController에서 잘못 상속 한 것입니다.

수정은 명시 적으로 엔진 네임 스페이스함으로써 주요 애플 리케이션보다는 엔진에서 상속 답변 컨트롤러를 강제로했다 :이 문제는 내 응용 프로그램에 오히려 특이한 이해

Engine::AnswersController < Engine::ApplicationController 

을하지만 어떻게 내가 도착 이 솔루션은 다른 사람들에게 도움이 될 수 있습니다. 이런 유형의 문제에 직면했다면, 어떤 유형의 디버거 (예 : Pry)에 들어가서 검사를 시작하십시오. 특히 어떤 클래스가로드되었는지 확인하고 상속 체인 (예 : Engine::ApplicationController.ancestors)을 자세히 살펴 봅니다. 이상하게 보이는 것을 찾으십시오.

또한 문제가 엔진 관련 사항 인 경우 엔진과 기본 앱에 디버거를 배치해야 할 수도 있습니다. 엔진에서 발생하는 오류가 반드시 주 앱에 버블 링되지 않을 수도 있기 때문에 디버깅 엔진은 어려울 수 있습니다.

이 문제를 해결하는 데 도움이 된 tjbladez에게 감사드립니다.