Ho notato quanto segue:
Motore completo
Con un motore completo, l'applicazione padre eredita i percorsi dal motore. Non è necessario specificare nulla in parent_app/config/routes.rb
. Specificare la gemma in Gemfile è sufficiente affinché l'app genitore erediti i modelli, i percorsi, ecc. I percorsi del motore sono specificati come:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
Nessuno spazio dei nomi di modelli, controller, ecc. Questi sono immediatamente accessibili all'applicazione principale.
Motore montabile
Lo spazio dei nomi del motore è isolato per impostazione predefinita:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
Con un motore montabile, le rotte sono con spazio dei nomi e l'app genitore può raggruppare questa funzionalità in una singola rotta:
# 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
I modelli, i controller, ecc. Sono isolati dall'applicazione principale, sebbene gli helper possano essere condivisi facilmente.
Queste sono le principali differenze che ho notato. Forse ce ne sono altri? Ho chiesto qui , ma devo ancora ricevere una risposta.
La mia impressione è che, poiché un motore completo non si isola dall'applicazione principale, è meglio utilizzarlo come applicazione autonoma adiacente all'app principale. Credo che potrebbero verificarsi conflitti di nome.
Un motore montabile può essere utilizzato in situazioni in cui si desidera evitare conflitti di nome e raggruppare il motore in un percorso specifico nell'applicazione padre. Ad esempio, sto lavorando alla costruzione del mio primo motore progettato per il servizio clienti. L'applicazione genitore potrebbe raggruppare le sue funzionalità in un unico percorso come:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
Se le mie ipotesi sono troppo lontane, qualcuno me lo faccia sapere e correggerò questa risposta. Ho fatto un piccolo articolo sull'argomento qui Saluti!