Låt oss först förstå skillnaden mellan enstaka och flerboende
Singel hyresrätt:
Varje kund har sin egen mjukvaruinstans, egen DB och den betjänar endast en kund. Här kan mjukvaran anpassas för att möta de specifika kundkraven då den är oberoende.
Flera hyresrätter:
I det här fallet betjänar en enda instans av programvara flera kunder. Här kallar vi varje kund som hyresgäst. Här kan vi ändra UI-reglerna och affärsreglerna men kan inte ändra applikationskoden eftersom samma arkitektur delas av flera kunder. Det är ekonomiskt eftersom kostnaderna för mjukvaruutveckling och underhåll delas mellan kunderna. Men uppdateringar kan endast göras av leverantören.
Fördelar:
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.
Nackdelar:
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.
Lägenhet Gem:
Denna pärla antar ett annat sätt att hantera flera hyresrätter. Det fungerar genom att göra en annan DB för varje hyresgäst. För PostgreSql skapar det ett annat schema för varje hyresgäst. Jag gillar det här tillvägagångssättet i ljuset av att informationen verkligen är oengagerad för den här situationen. Databasen delas inte och om du behöver radera en klients information behöver du bara släppa deras databas (eller mönster). Den stöder även Hissar och möjliggör automatisk växling mellan kundens hyresgäst och därigenom automatisera växlingslogiken.
This gem helps us to deal with multi tenancy in Rails application.
Add the line below, to your Gemfile and perform bundle install.
pärla "lägenhet"
För att generera lägenhetsinitieringsfil, kör kommandot nedan:
bundle exec rails generera lägenhet:installera
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.
skenor g ställning Kundnamn:sträng hyresgäst_domän:sträng
do
skenor db:migrera
Vi behöver skapa lägenhetshyresgäst, när vi väl har skapat kunden.
Apartment::Tenant.create('tenant_name') - För att skapa hyresgäst
Använd after_create callback i din modell för att skapa hyresgäster.
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 'Lägenhet::Hissar::Subdomän'
Att byta mellan hyresgästerna
Lägenhet::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 'Lägenhet::Hissar::FirstSubdomain'
Lägenhet::Hissar::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.
Lägenhet::Hissar::Subdomain.excluded_subdomains = ["public", "www" och "admin" ]
Vi kan också byta, baserat på hela värden. Här måste vi hitta motsvarande hyresgästnamn i hashen genom att använda följande konfigurationsrad. Vi måste lägga till raden nedan i din ansökan.rb
config.middleware.use 'Lägenhet::Hissar::HostHash', {'example.com' => 'exempel_hyresgäst'}
Släpp hyresgäster:
Kommandot nedan kan användas för att släppa hyresgäster:
Lägenhet::Tenant.drop('tenant_name')
Vänligen kontrollera gems officiella resurs för att hitta mer dokumentation.