我正在开发一个多公司网站,其中每个公司都有自己的数据库,当用户登录时,数据库将根据每个用户将拥有的“company.id”字段进行更改。问题是,当公司“X”的用户登录然后记录公司的另一个用户“Y”时,它会更改影响所有登录用户的数据库,每次更改时所有用户的数据库更改而不是仅更改对于登录的用户 这是我更改数据库的代码:
def set_database
if user_signed_in?
company = (current_user.company_id).to_s.to_sym
ActiveRecord::Base.establish_connection(company)
else
ActiveRecord::Base.establish_connection(:'232')
end
end
变量“company”将获取用户的“company_id”值并将与公司的数据库建立连接,例如公司的值为“32”,然后将在数据库中建立连接。 yml with:
'32':
adapter: sqlserver
mode: dblib
dataserver:
host: host
port: 1433
database: database
username: user
password: pass
timeout: 60000
azure: true
如何在不影响具有不同数据库的其他用户的情况下登录每个用户?
答案 0 :(得分:1)
根据您对rails的了解判断,您可能不希望在应用程序中此处(通过数据库)滚动自己的多租户(甚至是basecamp a very large rails app doesn't do that)。这是一个可以变得非常大而且毛茸茸的东西,并且在你达到足够大的规模之前不需要发生。同样,创建和拆除数据库连接会产生成本,这对于每个请求来说都是昂贵的。
相反,我建议使用multi-tenancy gem,其中有一些: