J'ai remarqué ce qui suit:
Moteur plein
Avec un moteur complet, l'application parente hérite des routes du moteur. Il n'est pas nécessaire de spécifier quoi que ce soit dans parent_app/config/routes.rb
. La spécification du gem dans Gemfile suffit pour que l'application parente hérite des modèles, des routes, etc. Les routes du moteur sont spécifiées comme suit:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
Pas d'espacement de noms des modèles, des contrôleurs, etc. Ceux-ci sont immédiatement accessibles à l'application parente.
Moteur montable
L'espace de noms du moteur est isolé par défaut:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
Avec un moteur montable, les routes sont espacées de noms et l'application parente peut regrouper cette fonctionnalité sous une seule route:
# 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
Les modèles, contrôleurs, etc. sont isolés de l'application parente - bien que les aides puissent être partagées facilement.
Ce sont les principales différences que j'ai repérées. Peut-être y en a-t-il d'autres? J'ai posé la question ici , mais je n'ai pas encore reçu de réponse.
Mon impression est que, comme un moteur complet ne s'isole pas de l'application parente, il est préférable de l'utiliser en tant qu'application autonome adjacente à l'application parente. Je pense que des conflits de noms pourraient survenir.
Un moteur montable peut être utilisé dans les situations où vous souhaitez éviter les conflits de noms et regrouper le moteur sous une route spécifique dans l'application parente. Par exemple, je travaille sur la construction de mon premier moteur conçu pour le service client. L'application parente pourrait regrouper ses fonctionnalités sous une seule route telle que:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
Si je suis loin dans mes hypothèses, quelqu'un s'il vous plaît laissez-moi savoir et je corrigerai cette réponse. J'ai fait un petit article sur le sujet ici Cheers!