Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Rails kiến ​​trúc nhiều đối tượng, truy cập phạm vi cho nhiều đối tượng thuê

Mặc dù đã tìm thấy nhiều ví dụ về đa thai trong các ứng dụng Rails khi tôi lần đầu tiên bắt đầu làm việc đó, tôi cũng không thể tìm thấy một ví dụ nào khiến tôi cảm thấy hoàn toàn thoải mái. Nhưng cuối cùng tôi cũng có một giải pháp mà tôi hài lòng.

Tôi bắt đầu với railscast 'đa thai với phạm vi'

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

sau đó xem xét việc thực hiện nhiều hợp đồng thuê nhà với việc tạo ra các tên miền phụ bằng cách sử dụng hướng dẫn này:

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

Nhưng tôi không coi đó là mệnh giá; Tôi nghiên cứu để thực sự hiểu cách mà devise hoạt động theo cách đó.

Khi tôi đã có tất cả những thứ đó tại chỗ, tôi đã sẵn sàng cho viên ngọc nhiều người:

https://github.com/wireframe/multitenant

Nhưng tôi không dừng lại ở đó. gem multitenant yêu cầu bạn nói Multitenant.with_tenant bất cứ khi nào bạn muốn mọi thứ có phạm vi phù hợp, vì vậy tôi đã tạo một TenantController trông giống như sau:

  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

và sau đó bất kỳ bộ điều khiển nào mà tôi muốn được đối tượng thuê sẽ kế thừa từ TenantController chứ không phải ApplicationController. Bằng cách đó, tôi không phải nhớ bất cứ điều gì trong các chi tiết của bộ điều khiển, nó 'chỉ hoạt động'. điều duy nhất mà các nhà phát triển phải nghĩ đến là 'đây có phải là bộ điều khiển đang xử lý dữ liệu của người thuê không?'

Mặc dù điều này vẫn phụ thuộc vào việc các nhà phát triển thực hiện một số điều chính xác (kế thừa từ bộ điều khiển phù hợp, có nghĩa là 'act_as_multitenant' trong mô hình, nó hoạt động thực sự tốt trong thực tế.



  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 ON DUPLICATE KEY UPDATE không cập nhật

  2. Phân tách hiệu suất giữa sql SELECT NULL và SELECT 1

  3. MySQL-db lib cho Python 3.x?

  4. if điều kiện trong câu lệnh chọn mysql

  5. Tài liệu khó hiểu về mysqldb của Python