Aşağıdakileri fark ettim:
Tam Motor
Tam motorla üst uygulama, rotaları motordan devralır. İçinde herhangi bir şey belirtmek gerekli değildir parent_app/config/routes.rb
. Gemfile'da gem'i belirtmek, üst uygulamanın modelleri, rotaları vb. Devralması için yeterlidir. Motor rotaları şu şekilde belirtilir:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
Modellerin, denetleyicilerin vb. Ad aralığı yoktur. Bunlara ana uygulama tarafından hemen erişilebilir.
Monte Edilebilir Motor
Motorun ad alanı varsayılan olarak yalıtılmıştır:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
Monte edilebilir bir motorla, rotalar ad alanlıdır ve ana uygulama bu işlevi tek bir yol altında paketleyebilir:
# 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
Modeller, kontrolörler vb. Ana uygulamadan izole edilmiştir - ancak yardımcılar kolayca paylaşılabilir.
Bunlar, gördüğüm ana farklılıklar. Belki başkaları da vardır? Ben üzerinden istediler burada , ama bir yanıt almayı henüz.
Benim izlenimime göre, tam bir motor kendisini ana uygulamadan izole etmediğinden, en iyi şekilde ana uygulamaya bitişik bağımsız bir uygulama olarak kullanılır. İsim çatışmalarının olabileceğine inanıyorum.
Ad çakışmalarını önlemek ve motoru ana uygulamadaki belirli bir yol altında toplamak istediğiniz durumlarda monte edilebilir bir motor kullanılabilir. Örneğin, müşteri hizmetleri için tasarlanmış ilk motorumu oluşturmak için çalışıyorum. Ana uygulama, işlevlerini aşağıdaki gibi tek bir yol altında toplayabilir:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
Varsayımlarımdan çok uzaksam, lütfen birisi bana haber versin, bu yanıtı düzeltirim. Konuyla ilgili burada küçük bir yazı yazdım Şerefe!