在rake任务中打开与mysql DB的连接

时间:2012-03-30 19:34:50

标签: mysql ruby-on-rails ruby-on-rails-3 postgresql activerecord

我有一个Rails 3.2应用程序,它使用PostgreSQL存储所有信息。

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

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

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

如何为实例建立额外连接?

2 个答案:

答案 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)