所以我正在使用rails 3.2.11开发多租户rails应用程序。我们选择了模式方法,因此我们使用了一个Postgres数据库。基于子域加载正确的模式。我们通过为每个只具有访问其自己架构中数据的权限的架构创建数据库用户,在数据库端增加了安全性。
我检查子域和建立正确数据库连接的所有代码都在我的应用程序控制器内的before_filter
方法内。
我的方法只是更改了search_path
,然后我使用以下ActiveRecord::Base.establish_connection
来更改数据库用户名和密码。
我已经编写了几个测试并通过应用程序确保它一切正常并且数据保存在正确的模式中(即使同时使用多个子域),到目前为止一直很好。
但我想提出两个大问题:
我现在正在使用ActiveRecord::Base.establish_connection
调用来建立数据库连接。因此,我刚从database.yml文件中删除了所有代码,一切仍然正常。但是......我以前从未做过类似的事情,有没有更正确的方法呢?我担心这可能会导致一些错误..
就像我之前所说的,调用before_filter
方法来建立正确的数据库连接。但就像我说我使用的是before_filter
,因此每次用户更改页面时都会重新建立连接。我担心这可能会导致性能问题,尤其是在应用程序增长时。而且我也不确定我是否忽略了任何东西,这可能会导致一些无法预料的错误。有没有人有这方面的经验,可以就如何处理这个方法提供一些建议?也许在某种程度上添加代码表明如果建立了正确的初始数据库连接,那么除非子域发生更改,否则不要再次重新建立连接?
感谢。
答案 0 :(得分:1)
这可能对您有用:https://github.com/influitive/apartment
Rails 3和ActiveRecord的多租户
Apartment提供了一些工具来帮助您处理多个数据库 你的Rails应用程序。如果您需要隔离某些数据 基于帐户或公司,但仍允许一些数据存在于 公共数据库,公寓可以提供帮助。
此外,SO上还有一大堆多租户问题,请查看