私は次のことに気づきました:
フルエンジン
フルエンジンの場合、親アプリケーションはエンジンからルートを継承します。で何も指定する必要はありません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
モデル、コントローラーなどは親アプリケーションから分離されていますが、ヘルパーは簡単に共有できます。
これらは私が見つけた主な違いです。おそらく他にもありますか?ここで質問しましたが、まだ返答がありません。
私の印象では、フルエンジンはそれ自体を親アプリケーションから分離しないため、親アプリに隣接するスタンドアロンアプリケーションとして使用するのが最適です。名前の衝突が発生する可能性があると思います。
マウント可能なエンジンは、名前の競合を回避し、親アプリケーションの1つの特定のルートにエンジンをバンドルする場合に使用できます。たとえば、私はカスタマーサービス用に設計された最初のエンジンの構築に取り組んでいます。親アプリケーションは、次のような単一のルートでその機能をバンドルできます。
mount Cornerstone::Engine => "/cornerstone", :as => "help"
私の想定から外れている場合は、誰かが私に知らせてください。私はこの応答を修正します。私はここで主題についての小さな記事を作りました 乾杯!