为每个用户更改数据库

时间:2017-04-11 21:40:07

标签: ruby-on-rails

我正在开发一个多公司网站,其中每个公司都有自己的数据库,当用户登录时,数据库将根据每个用户将拥有的“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

如何在不影响具有不同数据库的其他用户的情况下登录每个用户?

1 个答案:

答案 0 :(得分:1)

根据您对rails的了解判断,您可能不希望在应用程序中此处(通过数据库)滚动自己的多租户(甚至是basecamp a very large rails app doesn't do that)。这是一个可以变得非常大而且毛茸茸的东西,并且在你达到足够大的规模之前不需要发生。同样,创建和拆除数据库连接会产生成本,这对于每个请求来说都是昂贵的。

相反,我建议使用multi-tenancy gem,其中有一些:

或作为替代做multi-tenancy without database segmentation