Mysql
 sql >> база данни >  >> RDS >> Mysql

Многонаемателна архитектура на Rails, обхват на достъпа до множество наематели

Въпреки че открих много примери за мултинаемане в приложенията на Rails, когато за първи път се заех да го направя, не можах да намеря и такъв, който да ме накара да се чувствам напълно комфортно. Но най-накрая имам решение, от което съм доволен.

Започнах с 'multitenancy with scopes' railscast

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

след това разгледахме как да работим с множество наемания с поддомейни devise, използвайки това ръководство:

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

Но не го приемах за номинална стойност; Гмурнах се, за да разбера наистина как devise работи по този начин.

След като разполагах с всичко това, бях готов за скъпоценния камък с много наематели:

https://github.com/wireframe/multitenant

Но не спрях дотук. скъпоценният камък с много наематели изисква да кажете Multitenant.with_tenant винаги, когато искате нещата да бъдат обхватени по подходящ начин, затова създадох TenantController, който изглежда така:

  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

и след това всеки контролер, който искам да бъде обхванат от наемател, наследява от TenantController, а не ApplicationController. По този начин не трябваше да помня нищо в детайлите на контролера, той „просто работеше“. Единственото нещо, за което разработчиците трябваше да помислят, беше „това контролер ли е, който обработва данни за наематели?“

Въпреки че това все още зависи от това, че разработчиците правят няколко неща правилно (наследяване от правилния контролер, казвайки „acts_as_multitenant“ в модела, това работи много добре на практика.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Продължавам да получавам този код за грешка на mysql #1089

  2. Как да получа имена на колони в Laravel 4?

  3. MySQL заявка за комбиниране и търсене в 2 таблици

  4. Получаване на синтаксиса на подготвените изрази

  5. Изберете записи от днес, тази седмица, този месец php mysql