sql >> Databáze >  >> RDS >> Mysql

Rails multitenant architektura, rozsah přístupu pro více tenantů

Navzdory tomu, že jsem našel mnoho příkladů vícenásobného pronájmu v aplikacích Rails, když jsem se do toho poprvé pustil, nenašel jsem ani jeden, ve kterém bych se cítil naprosto pohodlně. Ale konečně mám řešení, se kterým jsem spokojený.

Začal jsem s 'multitenancy with scopes' railscast

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

poté jsme se podívali na to, jak zajistit, aby multi-tenancy fungoval s návrhem subdomén pomocí tohoto průvodce:

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

Ale nebral jsem to jako nominální hodnotu; Ponořil jsem se do toho, abych skutečně pochopil, jak takový návrh fungoval.

Jakmile jsem to všechno měl na svém místě, byl jsem připraven na klenot pro více nájemců:

https://github.com/wireframe/multitenant

Ale nezůstal jsem jen u toho. drahokam pro více nájemců vyžaduje, abyste řekli Multitenant.with_tenant, kdykoli chcete, aby byly věci správně vymezeny, takže jsem vytvořil TenantController, který vypadá takto:

  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

a poté jakýkoli řadič, který chci, aby byl vymezen tenantem, zdědí z TenantController spíše než ApplicationController. Tím pádem jsem si nemusel pamatovat nic v detailech ovladače, ten ‚prostě fungoval‘. jediná věc, na kterou museli vývojáři myslet, bylo „je toto kontrolér, který zpracovává data tenantů?“

I když to stále závisí na vývojářích, kteří udělají několik věcí správně (zdědí to od správného ovladače a v modelu říkají 'acts_as_multitenant', v praxi to funguje opravdu dobře.



  1. Který databázový stroj MySQL je lepší pro ukládání relací a dat relací:MyISAM nebo InnoDB?

  2. Jak v JavaFX přidat combobox s daty v zobrazení tabulky

  3. MySQL-GROUP a COUNT podle data

  4. Jak oříznout řetězec v SQLite