sql >> Database >  >> RDS >> Mysql

Rails multitenant-architectuur, toegang tot meerdere tenants

Ondanks dat ik veel voorbeelden van multitenancy in Rails-applicaties vond toen ik het voor het eerst ging doen, kon ik er ook geen vinden waarbij ik me helemaal op mijn gemak voelde. Maar ik heb eindelijk een oplossing waar ik blij mee ben.

Ik ben begonnen met de 'multitenancy with scopes' railscast

http://railscasts.com/episodes/388-multitenancy-with-scopes

heb vervolgens gekeken naar het maken van multi-tenancy werk met het bedenken van subdomeinen met behulp van deze handleiding:

https ://github.com/plataformatec/devise/wiki/How-To:--Isolate-users-to-log-into-a-single-subdomain

Maar dat nam ik niet zomaar aan; Ik dook erin om echt te begrijpen hoe devise op die manier werkte.

Toen ik dat allemaal op zijn plaats had, was ik klaar voor het multitenant-pareltje:

https://github.com/wireframe/multitenant

Maar daar bleef ik niet bij. de multitenant-juweel vereist dat je Multitenant.with_tenant zegt wanneer je wilt dat de zaken passend zijn, dus heb ik een TenantController gemaakt die er als volgt uitziet:

  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

en vervolgens erft elke controller die ik wil laten vallen door de huurder van TenantController in plaats van ApplicationController. Op die manier hoefde ik niets te onthouden in de details van de controller, het 'werkte gewoon'. het enige waar ontwikkelaars aan moesten denken was 'is dit een controller die gegevens van huurders verwerkt?'

Hoewel dit nog steeds afhankelijk is van het feit dat ontwikkelaars een paar dingen correct doen (overnemen van de juiste controller en 'acts_as_multitenant' in het model zeggen, werkt het in de praktijk heel goed.



  1. Fysieke replicatiemechanismen in PostgreSQL

  2. Mysql InnoDB-invoegsnelheid te laag?

  3. Tel het aantal opeenvolgende bezoeken

  4. Laravel Welsprekende query JSON-kolom met Where In?