2017-08-03 72 views
1

我最初只使用一個數據庫,但我需要添加客戶端其他數據庫,這是SQL Server數據庫。我能夠連接,但我遇到了一些問題。如何從Rails(PostgreSQL和SQL Server)中的雙重數據庫中提取數據

原始滿的database.yml

development: 
    adapter: postgresql 
    database: martin_development 
    username: ******* 
    password: ******* 
    pool: 5 
    timeout: 5000 

development_sec: 
    adapter: sqlserver 
    host: ******* 
    port: 1433 
    database: Database1 
    username: ******* 
    password: ******* 

我得到以下錯誤:

TinyTds::Error (Database 'DATABASE1' does not exist. Make sure that the name is entered correctly.)

如果我拿出數據庫名稱,所以它看起來是這樣的:

development_sec: 
     adapter: sqlserver 
     host: ******* 
     port: 1433 
     database: 
     username: ******* 
     password: ******* 

一切似乎運行正常,我沒有得到任何關於數據庫沒有找到的錯誤消息。但是,該數據庫確實存在於客戶端。

我很困惑如何從我的客戶SQL Server數據庫提取數據。我想有一些資源,我發現了,所以我的項目文件,到目前爲止在尋找這樣沿着沿:

模型(Mssql.rb)

class MssqlBase < ActiveRecord::Base 
    establish_connection :development_sec 
    self.abstract_class = true 
end 

模型(site.rb)

class Site < MssqlBase 


end 

控制器(sites_controller.rb)

class SitesController < ApplicationController 
    def index 

     @sites = Site.all 
     @hash = Gmaps4rails.build_markers(@sites) do |site, marker| 
     marker.lat site.latitude 
     marker.lng site.longitude 

    end 
    end 


end 

的database.yml

development: 
     adapter: postgresql 
     database: martin_development 
     username: ******* 
     password: ******* 
     pool: 5 
     timeout: 5000 

development_sec: 
     adapter: sqlserver 
     host: ******* 
     port: 1433 
     database: 
     username: ******* 
     password: ******* 

我的目標是開始拉動從數據庫數據,但由於這一下在問候我的文件,我收到以下錯誤現在:

ActiveRecord::StatementInvalid (TinyTds::Error: Invalid object name 'sites'.: SELECT [sites].* FROM [sites]):

所以剛開始我需要它從'DATABASE1'中讀取,但它表示它不存在。當我由於某種原因而將它關閉時,它與服務器連接,但我不知道哪個數據庫。現在我正在嘗試提取數據,但收到無效聲明。任何幫助,將不勝感激。

+0

你連接到哪個版本的MSSQL的?你用什麼寶石來連接。據我所知,你不能像沒有安裝適配器一樣將其設置爲MySQL。 – Beartech

+0

我正在使用tiny-tds gem和activerecord -sqlserver-adapter。它的版本是2008 r2。 –

+0

您可以嘗試使用以下命令連接irb:'require'rubygems';' 'require'tiny_tds';' 'client = TinyTds :: Client。new:username =>'*******',:password =>'*****',:host =>'host_url';' 顯然,用您的信息替換用戶名,密碼和主機url 。 – Beartech

回答

0

你可以用Rails來做到這一點。

創建此方法。

def with_connection(database, &block) 
    ActiveRecord::Base.establish_connection(database) 
    yield 
    ActiveRecord::Base.establish_connection 
end 

它改變你的應用連接到的數據庫,運行查詢,然後將其恢復爲默認值。不確定線程​​是否安全。使用establish_connection自身,也不會恢復到原來的(如您的應用程序只能在同一時間連接到一個數據庫)

然後使用:

with_connection :development_sec do 
    MssqlBase.first # will call development_sec database 
end 
相關問題