여러 번 파고 들자 나는 문제를 발견했습니다. 그것은 엔진 자체와 함께했습니다. 나는 프로젝트의 창작에 책임이 없다는 것을 지적해야하며, 지금은 프로젝트의 창작에 책임이있다. ...
app/controllers/api_engine/application_controller.rb
class ApplicationController < ActionController::Base
before_filter :foo_bar
layout :application
end
그리고 우리의 엔진은 api_engine라고하고 ApiEngine
모듈에서 분리 가지고있다 :
는 ... 우리의 호스트 레일 애플 리케이션이 말할 수 있습니다
app/controllers/application_controller.rb
:
module ApiEngine
class ApplicationController < ActionController::Base
layout false
end
end
app/controllers/api_engine/post_controller.rb
:
module ApiEngine
class PostController < ApplicationController
# code goes here...
end
end
당신은 이미 내가 어디로 갈지 알고 있니? 문제는 Rails의 동적로드와 엔진을 어리 석게 구성하는 것의 조합입니다.
서버에 만든 첫 번째 요청이 엔진의 PostController
에 때, post_controller.rb
파일이 ApiEngine
모듈 내에서 ApplicationController
일정을 통해 오는 필요합니다. 그러나 ::ApiEngine::ApplicationController
이 정의되어 있지 않으므로 ::ApplicationController
이 있는지 확인합니다. 엔진에서 application_controller.rb
을 찾으러가는 것입니다.
그러나 첫 번째 요청이 ApplicationController
을 정의하는 호스트 앱으로 이동하면 엔진이 요청을 받으면 루트 앱에서 ApplicationController
을 사용하여 간단하게 끝나게되며 클래스의 자체 버전은 필요하지 않습니다.
이 솔루션은 엔진의 lib/api_engine/engine.rb
파일에하는 config.after_initialize
블록 내에서 올바른 응용 프로그램 컨트롤러 파일이 필요합니다, 상당히 간단하다
module ApiEngine
class Engine < Rails::Engine
isolate_namespace ApiEngine
config.after_initialize do
require "api_engine/application_controller"
end
end
end
을 그것은 특별히 다른 사람의 코드를 처리, 추적하기가 조금 까다했다, 당신은 특정한 "기본적인"것들이 그들이하는 것처럼 작동한다고 가정하는 경향이 있습니다. 다행스럽게도이 답변은 다른 누구도 비슷한 이상한 상황에 처했을 때 유용 할 것입니다 :)
올바르게 이해 했으므로 루트 앱에'before_filter : authenticate_user'가있는 것 같습니다. 맞습니까? – bor1s