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

时间:2008-09-12 11:44:15

标签: ruby-on-rails

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

我意识到这是一个糟糕的Rails设计实践,但我们正在逐步取代每个用户使用一个数据库的现有Web应用程序。完全重新设计/重写是不可行的。

2 个答案:

答案 0 :(得分:10)

在您的应用程序控制器中添加这样的内容。我正在使用子域加上“_clientdb”来选择数据库的名称。我所有的数据库都使用相同的用户名和密码,所以我可以从db配置文件中获取它。

希望这有帮助!

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 :(得分:1)

看看ActiveRecord::Base.establish_connection。这就是你连接到不同数据库服务器的方式。我不能得到更多的帮助,因为我不知道你如何识别用户或将其映射到它的数据库,但我想主数据库将具有该信息(并且连接信息应该在database.yml文件上)。

祝你好运。