![](/img/trans.png)
[英]Active Record Could not obtain a database connection within 5.000 seconds
[英]Cross Database Connection with Active Record
我有兩個網站,每個網站都連接到自己獨特的數據庫。 我需要在網站“A”中驗證網站“B”數據庫中是否存在電子郵件地址。 我正在進行如下驗證:
從網站'A的AccountController < ApplicationController
類調用:
config = YAML::load(File.open("#{RAILS_ROOT}/config/database.yml"))
ActiveRecord::Base.establish_connection(config["database B"])
if ActiveRecord::Base.connection.select_values("SELECT "database B".X
FROM 'database B".X WHERE 'database B'.X.email = @member_email")
當我在開發和QA環境中測試它但在我的生產環境中失敗時,此調用有效。 生產中似乎發生的事情是ActiveRecord的值以及select
get與當前登錄用戶的活動記錄混合,但僅限於生產中。
好的,所以我根據反饋將我的文件修改為以下內容。 仍然沒有工作......有人可以查看下面的文件,看看我錯過了哪些步驟? 謝謝!
謝謝! 我認為這就是我所做的,但我創造了'模型',並且,作為一個新手,我不確定這通常是由Rails生成的......
仍然失敗,你介意看看下面的內容,看看你是否看到我做錯了什么?
首先,這是我想要在現有應用程序中連接的第二個數據庫的“遺留”數據庫模型(請注意,執行'Fileload'是我唯一可以解決此問題的方法。):
class MMSDB < ActiveRecord::Base
self.abstract_class = true #important!
config = YAML :: load(File.open(“#{RAILS_ROOT} /config/database.yml”))
establish_connection(CONFIG [ “deals_qa”])
結束
其次,這是調用'MMSDB'模型的模型(見上文)
class Redirect < MMSDB
def初始化
結束
def email_exists?(email)if find_by_email(email)user = find_by_email(email)user.redirect_count + = 1 user.save end end
結束
然后,這是帳戶控制器文件中的代碼段。
else
if user == Redirect::User.email_exists?(@email)
@Redirect_Flag = true
else
flash.now[:error] = 'Invalid email or password; please try again.'
end
end
子類化ActiveRecord :: Base將允許您與不同的數據庫建立多個連接。
module DatabaseB
class Base < ActiveRecord::Base
@abstract_class = true
establish_connection(config["database B"])
end
end
class YourAwesomeModel < DatabaseB::Base
set_table_name "X"
# Use your regular active record magic
end
您仍然可以將其他模型與使用ActiveRecord :: Base建立的連接一起用於主數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.