3

我有一个使用PostgreSQL存储所有信息的Rails 3.2应用程序。在rake任务中打开连接到mysql数据库

但是在一个Rake任务中,我需要与MySQL服务器建立连接。我试图做到这一点:

ActiveRecord::Base.establish_connection(
    :adapter => "mysql2", 
    :database => "foo", 
    :user => "root", 
    :password => "", 
) 

但它只是用这个临时MySQL替换我的默认PostgreSQL连接。

如何为实例创建附加连接?

回答

5

我发现了一个很简单的解决办法:到了vanila mysql2宝石(https://github.com/brianmario/mysql2

现在我的代码如下所示:

client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "foobar", :password => "") 
users = client.query("SELECT * FROM users") 

之后,我有结果的数组。

+0

有没有这种方法的postgres版本? gem activerecord-postgresql-adapter(0.0.1) – Ari53nN3o 2012-09-25 18:11:03

2

不要在ActiveRecord :: Base上建立它。

如你所发现的,establish_connection从一个类连接到一个数据库,所以当你在AR:Base上执行时,每个子类(对整个数据库)都建立了连接,代替目前的一个。

基本上,您要为每个要连接的表创建一个类,并在这些表中调用建立连接方法。如果你想在几张表中做到这一点,那么创建一个包含它的模块。

class MyCustomClass < ActiveRecord::Base 
    establish_connection(
    :adapter => "mysql2", 
    :database => "foo", 
    :user => "root", 
    :password => "", 
) 
end 

MyCustomClass.find(1) 
+0

对不起,但我根本不需要模型。只需连接到mysql并运行查询 – Kir 2012-03-30 21:33:12

+0

你究竟想要检索什么?如果你有类中的连接(就像你在我的例子中那样),并且你真的只想运行一个查询,你总是可以执行MyCustomClass.connection.execute(“sql go here”)? – 2012-03-30 21:37:00

+0

我想将一个普通的mysql表转换成Rails模型 – Kir 2012-03-30 22:36:35