2013-04-03 99 views
1

因此,我正在使用導軌3.2.11來開發多租戶導軌應用程序。我們選擇了模式方法,因此我們使用單個Postgres數據庫。基於子域加載正確的模式。我們通過爲每個只有權訪問自己架構中的數據的架構創建數據庫用戶,從而增加了數據庫端的安全性。具有多個架構的多租戶導軌應用程序

我所有用於檢查子域和建立正確的數據庫連接的代碼都在我的應用程序控制器中的before_filter方法中。

我的方法只是簡單地更改search_path,然後我使用以下ActiveRecord::Base.establish_connection來更改數據庫用戶名和密碼。

我寫了幾個測試,並通過了應用程序,以確保它能正常工作,數據保存在適當的模式(即使在同一時間使用多個子域),到目前爲止這麼好。

但我有2點比較大的問題,我想請教一下:

  1. 我現在使用ActiveRecord::Base.establish_connection呼叫建立數據庫連接。因此,我剛從我的database.yml文件中刪除了所有的代碼,並且所有代碼仍然正常工作。但是......我從來沒有做過這樣的事情,有沒有更正確的做法呢?我擔心這可能會導致一些bug ..

  2. 就像我之前說的,調用before_filter方法來建立正確的數據庫連接。但正如我所說我正在使用before_filter,所以每次用戶更改頁面時,連接都會重新建立。我擔心這可能會導致性能問題,尤其是隨着應用程序的增長。而且我不確定我是否忽略了任何內容,這可能會導致一些無法預料的錯誤。有沒有人有這方面的經驗,並可以提供一些方法如何處理這個建議?也許有一些方法可以添加代碼,說明是否建立了正確的初始數據庫連接,那麼除非子域更改,否則不要重新建立連接?

謝謝。

+0

我可以保證,建立對每一個請求連接將有嚴重影響性能。不要這樣做:) 您可以在初始化程序中(例如在加載掛接上的activerecord上)建立所有連接,並嘗試在每個請求上切換連接變量? 此外,檢查出http://stackoverflow.com/questions/2782758/creating-a-multi-tenant-application-using-postgresqls-schemas-and-rails?rq=1 – bbozo

回答

0

這可能對你有用:https://github.com/influitive/apartment

多租戶爲Rails 3和ActiveRecord的

公寓提供的工具可幫助您應對 Rails應用程序的多個數據庫。如果您需要根據帳戶或公司將某些數據隔離 ,但仍允許某些數據存在於公用數據庫 中,Apartment可以提供幫助。

此外,還有的多租戶的問題一大堆這裏SO,檢查出來