Saya telah memperhatikan yang berikut:
Mesin Penuh
Dengan mesin penuh, aplikasi induk mewarisi rute dari mesin. Tidak perlu menentukan apa pun di parent_app/config/routes.rb
. Menentukan gem di Gemfile sudah cukup bagi aplikasi induk untuk mewarisi model, rute, dll. Rute mesin ditetapkan sebagai:
# my_engine/config/routes.rb
Rails.application.routes.draw do
# whatever
end
Tidak ada namespacing model, pengontrol, dll. Ini segera dapat diakses oleh aplikasi induk.
Mesin yang Dapat Dipasang
Namespace mesin diisolasi secara default:
# my_engine/lib/my_engine/engine.rb
module MyEngine
class Engine < Rails::Engine
isolate_namespace MyEngine
end
end
Dengan mesin yang dapat dipasang, rute diberi ruang nama dan aplikasi induk dapat memaketkan fungsionalitas ini dalam satu rute:
# 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
Model, pengontrol, dll diisolasi dari aplikasi induk - meskipun pembantu dapat dibagikan dengan mudah.
Inilah perbedaan utama yang saya lihat. Mungkin ada yang lain? Saya telah bertanya di sini , tetapi belum menerima tanggapan.
Kesan saya adalah karena mesin penuh tidak mengisolasi dirinya dari aplikasi induk, paling baik digunakan sebagai aplikasi mandiri yang berdekatan dengan aplikasi induk. Saya yakin bentrokan nama bisa terjadi.
Mesin yang dapat dipasang dapat digunakan dalam situasi di mana Anda ingin menghindari konflik nama dan menggabungkan mesin di bawah satu rute tertentu di aplikasi induk. Misalnya, saya sedang membangun mesin pertama saya yang dirancang untuk layanan pelanggan. Aplikasi induk dapat menggabungkan fungsionalitasnya dalam satu rute seperti:
mount Cornerstone::Engine => "/cornerstone", :as => "help"
Jika asumsi saya salah, seseorang harap beri tahu saya dan saya akan memperbaiki tanggapan ini. Saya telah membuat artikel kecil tentang subjek di sini Cheers!