我有一个Rails 3.2应用程序,它使用PostgreSQL存储所有信息。
但是在一个Rake任务中我需要与MySQL服务器建立连接。我试着这样做:
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:database => "foo",
:user => "root",
:password => "",
)
但它只是用这个临时MySQL替换了我的默认PostgreSQL连接。
如何为实例建立额外连接?
答案 0 :(得分:5)
我找到了一个非常简单的解决方案:对于vanilla mysql2 gem(https://github.com/brianmario/mysql2)
现在我的代码如下:
client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "foobar", :password => "")
users = client.query("SELECT * FROM users")
之后我得到了一系列结果。
答案 1 :(得分:2)
不要在ActiveRecord :: Base上建立它。
正如您所发现的那样,establish_connection连接到类中的数据库,因此当您在AR:Base上执行此操作时,它的每个子类(对于whit,整个数据库)都建立了连接,替换当前之一。
基本上,您为要连接的每个表创建一个类,并在其中调用establish connection方法。如果你想在几个表中完成它,那么用它创建一个模块并包含它。
class MyCustomClass < ActiveRecord::Base
establish_connection(
:adapter => "mysql2",
:database => "foo",
:user => "root",
:password => "",
)
end
MyCustomClass.find(1)