Multi Tenancy utilizzando l'appartamento gem

Cerchiamo innanzitutto di capire la differenza tra single e multi-tenancy

Locazione singola
:

Ogni cliente ha la propria istanza software, il proprio DB e serve per un solo cliente. In questo caso il software può essere personalizzato per soddisfare le specifiche esigenze del cliente poiché è indipendente.


Multilocazione:

In questo caso, una singola istanza dell'applicazione software serve più clienti. Qui chiamiamo ogni cliente come inquilino. Qui possiamo modificare le regole dell'interfaccia utente e le regole aziendali ma non possiamo modificare il codice dell'applicazione poiché la stessa architettura è condivisa da più clienti. È economico poiché i costi di sviluppo e manutenzione del software sono condivisi tra i clienti. Ma gli aggiornamenti possono essere effettuati solo dal provider.

singletenant-multitenant
Vantaggi:
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.

Svantaggi:
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.

Appartamento gioiello:

Questo gioiello adotta un modo diverso di gestire la multi-tenancy. Funziona creando un altro DB per ciascun inquilino. Per PostgreSql, crea un altro schema per ciascun tenant. Mi piace questo approccio alla luce del fatto che, per questa situazione, l'informazione è davvero disimpegnata. Il database non è condiviso e, nel caso in cui sia necessario cancellare le informazioni di un cliente, tutto ciò che devi fare è semplicemente eliminare il suo database (o modello). Supporta anche gli ascensori e consente il passaggio automatico tra l'inquilino del cliente e quindi l'automazione della logica di commutazione.

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

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

gioiello "appartamento"

Per generare il file inizializzatore dell'appartamento, esegui il comando seguente:

bundle exec rails genera 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.

rotaie g impalcatura Nome cliente:string tenant_domain:string

Fare

rotaie db:migrare

Dobbiamo creare l'inquilino dell'appartamento, una volta creato il cliente.

Appartamento::Tenant.create('tenant_name') - Per creare un inquilino

Utilizza after_create callback nel tuo modello per creare tenant.

def crea_tenant Appartamento::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 'Appartamento::Ascensori::Sottodominio'

Per passare da un inquilino all'altro

Appartamento::Inquilino.switch!('nome_inquilino')

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 'Appartamento::Ascensori::PrimoSottodominio'
Appartamento::Ascensori::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.

Appartamento::Ascensori::Sottodominio.excluded_subdomains = ["pubblico", "www" e "admin"]

Possiamo anche cambiare, in base all'host completo. Qui dobbiamo trovare il nome del tenant corrispondente nell'hash utilizzando la seguente riga di configurazione. Dobbiamo aggiungere la riga seguente al tuo application.rb

config.middleware.use 'Appartamento::Ascensori::HostHash', {'example.com' => 'example_tenant'}

Abbandonare gli inquilini:

Il comando seguente può essere utilizzato per eliminare i tenant:

Appartamento::Inquilino.drop('nome_inquilino')

Si prega di controllare la risorsa ufficiale di gem per trovare ulteriore documentazione. 

Iscriviti per gli ultimi aggiornamenti

Articoli correlati

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItalian