Rails中实现每个用户的数据库连接的最佳方法是什么?

6

在Rails中,最佳的按用户进行数据库连接的方法是什么?

我知道这是一种不良的Rails设计实践,但我们正在逐步替换一个使用每个用户一个数据库的现有Web应用程序。完全重新设计/重写是不可行的。

2个回答

10

在你的应用程序控制器中加入类似这样的内容。我使用子域名加上 "_clientdb" 来选择数据库的名称。我让所有的数据库都使用相同的用户名和密码,所以我可以从数据库配置文件中获取它们。

希望这有所帮助!

class ApplicationController < ActionController::Base

  before_filter :hijack_db

  def hijack_db
    db_name = request.subdomains.first + "_clientdb"

    # lets manually connect to the proper db
    ActiveRecord::Base.establish_connection(
      :adapter  => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['adapter'],
      :host     => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['host'],
      :username => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['username'],
      :password => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['password'],
      :database => db_name
    )
  end
end

1

看一下ActiveRecord :: Base.establish_connection。 这就是你连接到另一个数据库服务器的方法。 我无法提供更多帮助,因为我不知道您如何识别用户或将其映射到其数据库,但我想一个主数据库将拥有该信息(连接信息应在 database.yml 文件中)。

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接