私は次のことに気づきました:
フルエンジン
完全なエンジンでは、親アプリケーションはエンジンからルートを継承します。で何も指定する必要はありません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"
私が想定から外れている場合は、誰かに知らせてください。この応答を修正します。私はここで主題についての小さな記事を作りました 乾杯!