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