Multi-Tenancy durch Nutzung von Apartment gem

Lassen Sie uns zunächst den Unterschied zwischen Single- und Multi-Tenancy verstehen

Einzelmietverhältnis
:

Jeder Kunde verfügt über eine eigene Softwareinstanz, eine eigene Datenbank und diese dient nur einem Kunden. Dabei kann die Software aufgrund ihrer Eigenständigkeit individuell an die spezifischen Kundenanforderungen angepasst werden.


Mehrmandantenfähigkeit:

In diesem Fall bedient eine einzelne Instanz einer Softwareanwendung mehrere Kunden. Hierbei bezeichnen wir jeden Kunden als Mieter. Hier können wir die UI-Regeln und Geschäftsregeln ändern, aber keinen Anwendungscode ändern, da dieselbe Architektur von mehreren Kunden gemeinsam genutzt wird. Es ist wirtschaftlich, da die Softwareentwicklungs- und Wartungskosten zwischen den Kunden aufgeteilt werden. Updates können jedoch nur vom Anbieter durchgeführt werden.

singletenant-multitenant
Vorteile:
1. Single hardware that manages multiple customers.
2. Cost savings. Cost can be shared between all the customers.
3. Easy maintenance
4. Configuration can be changed without touching codebase.
5. New tenants can be added easily since it is a shared architecture.

Nachteile:
DB customization will be difficult to handle since it is a single DB shared between multiple customers with different tenants.

There are milia, acts_as_tenant and apartment gem to handle multi-tenancy in the Rails application.

Apartment-Juwel:

Dieses Juwel verfolgt einen anderen Weg, mit Multi-Tenancy umzugehen. Es funktioniert, indem für jeden Mandanten eine andere Datenbank erstellt wird. Für PostgreSql wird für jeden Mandanten ein anderes Schema erstellt. Ich mag diesen Ansatz vor dem Hintergrund, dass die Informationen in dieser Situation wirklich uninteressant sind. Die Datenbank wird nicht geteilt und wenn Sie die Daten eines Kunden löschen möchten, müssen Sie lediglich dessen Datenbank (oder Muster) löschen. Es unterstützt auch Aufzüge und ermöglicht den automatischen Wechsel zwischen dem Mieter des Kunden und dadurch die Automatisierung der Wechsellogik.

This gem helps us to deal with multi tenancy in Rails application.

Add the line below, to your Gemfile and perform bundle install.

Juwel 'Wohnung'

Führen Sie den folgenden Befehl aus, um eine Apartment-Initialisierungsdatei zu generieren:

Bundle Exec Rails generieren Apartment:install
config.excluded_models = %w{ Tenant } 

Here, we can specify the tenants which are of global scope, such as the Authentication model which is a common one for all the tenants.

Here, I will be creating a Customer with subdomains, so, whenever customer logs in to the application, apartment fetches the subdomains and will query the database, based on tenant subdomain.

Schienen g Gerüst Kundenname:string Mieterdomäne:string

Tun

Schienen db: migrieren

Sobald wir den Kunden erstellt haben, müssen wir einen Wohnungsmieter erstellen.

Apartment::Tenant.create('tenant_name') – Zum Erstellen eines Mieters

Verwenden Sie den Rückruf „after_create“ in Ihrem Modell, um Mandanten zu erstellen.

def create_tenant Apartment::Tenant.create(tenant_domain) end

Once the above callback gets executed, all the migrations will run under that respective tenant.

Switching of subdomains will be handled automatically when we request the application with subdomains. Below is the configuration line to switch the tenants based on subdomain.

Rails.application.config.middleware.use 'Apartment::Elevators::Subdomain'

Zum Wechsel zwischen den Mietern

Wohnung::Tenant.switch!('tenant_name')

All your ActiveRecord queries will be routed to the specific tenant when switch is called for.
Switch will be in the root scope when you call with no arguments.

Even tenant switch can be done based on the first subdomain but we need to set config in the initializer file. We can even exclude some subdomains here, such as the normal subdomain.

config.middleware.use 'Apartment::Elevators::FirstSubdomain'
Apartment::Elevators::FirstSubdomain.excluded_subdomains = ['www']

We can also restrict the users not to create some domains such as www, admin. These domains will not be available for the users while they were being registered.

Need to uncomment below config line in the apartment initializer file.

Apartment::Elevators::Subdomain.excluded_subdomains = ["public", "www" und "admin" ]

Wir können auch basierend auf dem vollständigen Host wechseln. Hier müssen wir mithilfe der folgenden Konfigurationszeile den entsprechenden Mandantennamen im Hash finden. Wir müssen die folgende Zeile zu Ihrer application.rb hinzufügen

config.middleware.use 'Apartment::Elevators::HostHash', {'example.com' => 'example_tenant'}

Mieter abgeben:

Mit dem folgenden Befehl können Mandanten gelöscht werden:

Wohnung::Tenant.drop('tenant_name')

Weitere Dokumentation finden Sie in der offiziellen Gem-Ressource. 

Abonnieren Sie die neuesten Updates

zusammenhängende Posts

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEGerman