2016-06-22 6 views
1

私はActiveRecordでマルチデータベースを使用しています。すべてのモデルにestablish_connection dbを入れなければなりません。しかし、私はライブラリファイルの接続を呼び出したい。すべてのモデルでestablish_connection dbを入力している間データベース接続数が多すぎます。他の方法はどうしたらいいですか?ActiveRecord :: Base.establish_connectionでデータベース接続があまりにも多い

私のプロジェクトはRuby on Sinatraです。

答えて

0

あなたが持っているすべての可能な接続のための{db_name => connection_instance }のグローバルなハッシュを構築し、インテリジェントにあなたのモデルからそれらを取得する:あなたはすべて、すでに確立された接続を再利用します

def get_or_establish_connection db 
    $connections[db] ||= establish_connection db 
end 

その方法。

NBあなたのアーキテクチャの詳細を知らなくても、より堅牢なものを提案する方法がないため、「グローバル」と書いています。実生活では、このハッシュをどこからでもアクセス可能なクラス変数として配置します。

0

複数のデータベースを使用したプロジェクトで行ったことは、データベースごとに1つのクラスを作成し、接続を確立し、モデルを継承させることでした。これにより、データベースごとに1つの接続しか作成されません。

class UsageTable < ActiveRecord::Base 
    self.abstract_class = true 
    establish_connection :usage 
end 
class User < UsageTable 
+0

私はあなたの提案を試みましたが、データベースクラスはモデルクラスを継承することはできません。 – sozgur

関連する問題