다음을 발견했습니다.
전체 엔진
전체 엔진을 사용하는 경우 상위 애플리케이션은 엔진에서 경로를 상속합니다. 에서 아무것도 지정할 필요가 없습니다 parent_app/config/routes.rb
. Gemfile에서 gem을 지정하면 상위 앱이 모델, 경로 등을 상속하기에 충분합니다. 엔진 경로는 다음과 같이 지정됩니다.
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
모델, 컨트롤러 등의 네임 스페이스가 없습니다. 상위 애플리케이션에서 즉시 액세스 할 수 있습니다.
장착 가능한 엔진
엔진의 네임 스페이스는 기본적으로 격리됩니다.
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
탑재 가능한 엔진을 사용하면 경로에 네임 스페이스가 지정되고 상위 앱은 단일 경로 아래에이 기능을 번들로 제공 할 수 있습니다.
# my_engine/config/routes.rb
MyEngine::Engine.routes.draw do
#whatever
end
# parent_app/config/routes.rb
ParentApp::Application.routes.draw do
mount MyEngine::Engine => "/engine", :as => "namespaced"
end
헬퍼를 쉽게 공유 할 수 있지만 모델, 컨트롤러 등은 상위 애플리케이션에서 분리됩니다.
이것이 내가 발견 한 주요 차이점입니다. 아마도 다른 것이 있습니까? 여기 에서 요청 했지만 아직 응답을받지 못했습니다.
내 인상은 전체 엔진이 상위 애플리케이션과 분리되지 않기 때문에 상위 앱에 인접한 독립 실행 형 애플리케이션으로 가장 잘 사용된다는 것입니다. 이름 충돌이 발생할 수 있다고 생각합니다.
마운트 가능한 엔진은 이름 충돌을 방지하고 상위 애플리케이션의 특정 경로 아래에 엔진을 번들링하려는 상황에서 사용할 수 있습니다. 예를 들어, 저는 고객 서비스를 위해 설계된 첫 번째 엔진을 만드는 작업을하고 있습니다. 상위 애플리케이션은 다음과 같은 단일 경로 아래에 기능을 번들로 제공 할 수 있습니다.
mount Cornerstone::Engine => "/cornerstone", :as => "help"
내 가정에서 벗어난 경우 누군가 알려 주시면이 응답을 수정하겠습니다. 여기 에 주제에 대한 작은 기사를 만들었습니다. 건배!