所以我正在使用 rails 3.2.11 开发一个多租户 rails 应用程序。我们选择了模式方法,因此我们使用单个 Postgres 数据库。根据子域加载正确的架构。我们通过为每个模式创建一个数据库用户来增加数据库端的安全性,该用户只有权访问其自己的模式中的数据。
我用于检查子域和建立正确数据库连接的所有代码都before_filter
在我的应用程序控制器内部的一个方法中。
我的方法只是更改了search_path
,然后我使用以下内容ActiveRecord::Base.establish_connection
更改数据库用户名和密码。
我已经编写了几个测试并浏览了该应用程序,以确保它一切正常并且数据保存在正确的模式中(即使同时使用多个子域),到目前为止一切都很好。
但我有两个大问题想问:
我现在正在使用该
ActiveRecord::Base.establish_connection
调用来建立数据库连接。因此,我刚刚从我的 database.yml 文件中删除了所有代码,一切仍然正常。但是...我以前从来没有做过这样的事情,有没有更正确的方法呢?我担心这可能会导致一些错误..就像我之前说的,
before_filter
调用一个方法来建立正确的数据库连接。但是就像我说的那样,我使用的是before_filter
,所以每次用户更改页面时,都会重新建立连接。我担心这可能会导致性能问题,尤其是随着应用程序的增长。而且我不确定我是否忽略了任何东西,这可能会导致一些无法预料的错误。有没有人有这方面的经验,可以就如何处理这个问题提供一些建议?也许有办法添加代码,说明如果建立了正确的初始数据库连接,那么除非子域发生变化,否则不要再次重新建立连接?
谢谢。