sql >> Database teknologi >  >> RDS >> Mysql

Rails multitenant arkitektur, scoping adgang til flere lejere

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.



  1. Oracle Forskelle mellem NVL og Coalesce

  2. mysql vælg top n max værdier

  3. com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException:Kan ikke kalde rollback, når autocommit=true

  4. MySQL - Få de første 3 kommaseparerede værdier