Meskipun menemukan banyak contoh multitenancy dalam aplikasi Rails ketika saya pertama kali melakukannya, saya juga tidak dapat menemukan satu pun yang membuat saya merasa benar-benar nyaman. Tapi akhirnya saya punya solusi yang saya senangi.
Saya mulai dengan 'multitenancy with scopes' railscast
http://railscasts.com/episodes/388-multitenancy-with-scopes
kemudian melihat membuat pekerjaan multi-penyewaan dengan merancang subdomain menggunakan panduan ini:
https ://github.com/plataformatec/devise/wiki/How-To:--Isolate-users-to-log-into-a-single-subdomain
Tapi saya tidak menganggapnya begitu saja; Saya terjun untuk benar-benar memahami bagaimana rancangan bekerja seperti itu.
Setelah saya memiliki semua itu, saya siap untuk permata multitenant:
https://github.com/wireframe/multitenant
Tapi saya tidak berhenti di situ. permata multitenant mengharuskan Anda mengatakan Multitenant.with_tenant kapan pun Anda ingin segala sesuatunya tercakup dengan tepat, jadi saya membuat TenantController yang terlihat seperti ini:
around_filter :scope_current_tenant
def scope_current_tenant
begin
Firm.current = Firm.find_by_subdomain!(request.subdomain)
rescue
raise ActionController::RoutingError.new('Not Found')
end
Multitenant.with_tenant Firm.current do
yield
end
ensure
Firm.current = nil
end
end
dan kemudian pengontrol apa pun yang saya ingin dicakup oleh penyewa mewarisi dari TenantController daripada ApplicationController. Dengan begitu saya tidak perlu mengingat apa pun dalam detail pengontrol, itu 'berhasil'. satu-satunya hal yang harus dipikirkan pengembang adalah 'apakah ini pengontrol yang menangani data penyewa?'
Meskipun ini masih bergantung pada pengembang yang melakukan beberapa hal dengan benar (mewarisi dari pengontrol yang tepat, mengatakan 'acts_as_multitenant' dalam model, praktiknya bekerja dengan sangat baik.