På trods af at jeg fandt mange eksempler på multitenancy i Rails-applikationer, da jeg først gik i gang med det, kunne jeg heller ikke finde et, der fik mig til at føle mig helt tryg. Men jeg har endelig en løsning, jeg er glad for.
Jeg startede med 'multitenancy with scopes' railscast
http://railscasts.com/episodes/388-multitenancy-with-scopes a>
så på at få multi-lejemål til at fungere med devise underdomæner ved hjælp af denne guide:
https ://github.com/plataformatec/devise/wiki/How-To:--Isolate-users-to-log-into-a-single-subdomain
Men det tog jeg ikke for pålydende; Jeg dykkede ind for virkelig at forstå, hvordan udformning fungerede på den måde.
Da jeg havde alt det på plads, var jeg klar til multitenant-perlen:
https://github.com/wireframe/multitenant
Men jeg stoppede ikke der. multitenant-perlen kræver, at du siger Multitenant.with_tenant, når du ønsker, at tingene skal være passende, så jeg oprettede en TenantController, der ser sådan ud:
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
og så arver enhver controller, jeg ønsker, skal omfattes af lejer fra TenantController i stedet for ApplicationController. På den måde behøvede jeg ikke at huske noget i detaljerne i controlleren, det 'bare virkede'. det eneste, udviklere skulle tænke på, var 'er dette en controller, der håndterer lejerdata?'
Selvom dette stadig afhænger af, at udviklere gør et par ting korrekt (arver fra den rigtige controller, siger 'acts_as_multitenant' i modellen, fungerer det rigtig godt i praksis.