Inquilino múltiple mediante el uso de la joya del apartamento

Primero, comprendamos la diferencia entre arrendamiento único y arrendamiento múltiple.

arrendamiento único
:

Cada cliente tiene su propia instancia de software, su propia base de datos y sirve para un solo cliente. Aquí, el software se puede personalizar para cumplir con los requisitos específicos del cliente, ya que es independiente.


Multi Alquiler:

En este caso, una única instancia de aplicación de software sirve a varios clientes. Aquí llamamos a cada cliente inquilino. Aquí podemos modificar las reglas de la interfaz de usuario y las reglas comerciales, pero no podemos modificar el código de la aplicación, ya que varios clientes comparten la misma arquitectura. Es económico ya que los costos de desarrollo y mantenimiento del software se comparten entre los clientes. Pero las actualizaciones sólo las puede realizar el proveedor.

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

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

Apartamento joya:

Esta joya adopta una forma diferente de lidiar con el arrendamiento múltiple. Funciona creando otra base de datos para cada inquilino. Para PostgreSql, crea otro esquema para cada inquilino. Me gusta este enfoque porque, en esta situación, la información es realmente desconectada. La base de datos no se comparte y, en caso de que necesite borrar la información de un cliente, todo lo que necesita hacer es simplemente eliminar su base de datos (o patrón). También admite ascensores y permite el cambio automático entre el inquilino del cliente y, por lo tanto, automatiza la lógica de cambio.

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

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

joya 'apartamento'

Para generar un archivo inicializador de apartamento, ejecute el siguiente comando:

paquete de rieles ejecutivos genera apartamento: instalar
config.excluded_models = %w{ Inquilino } 

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.

rieles g andamio Nombre del cliente: cadena inquilino_dominio: cadena

hacer

rieles db:migrar

Necesitamos crear el inquilino del apartamento, una vez que hayamos creado el cliente.

Apartment::Tenant.create('tenant_name') - Para crear un inquilino

Utilice la devolución de llamada after_create en su modelo para crear inquilinos.

def create_tenant Apartamento::Tenant.create(tenant_domain) fin

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 'Apartamento::Ascensores::Subdominio'

Para cambiar entre los inquilinos

Apartamento::Inquilino.cambiar!('nombre_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 'Apartamento::Ascensores::PrimerSubdominio'
Apartamento::Ascensores::PrimerSubdominio.subdominios_excluidos = ['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.

Apartamento::Ascensores::Subdominio.subdominios_excluidos = ["público", "www" y "admin" ]

También podemos cambiar, según el host completo. Aquí, necesitamos encontrar el nombre del inquilino correspondiente en el hash usando la siguiente línea de configuración. Necesitamos agregar la siguiente línea a su aplicación.rb

config.middleware.use 'Apartamento::Ascensores::HostHash', {'example.com' => 'example_tenant'}

Bajar inquilinos:

El siguiente comando se puede utilizar para eliminar inquilinos:

Apartamento::Inquilino.drop('nombre_inquilino')

Consulte el recurso oficial de Gem para encontrar más documentación. 

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESSpanish