0

연결 필요 클라이언트 기반 다중 데이터베이스. 내가 같은 모델의 다른 데이터베이스로 전환하는 몇 가지 해결책을 발견여러 데이터베이스 레일 연결

, SupportBase.rb에서

사용자 모델에서

,

class User < ActiveRecord::Base 
    SupportBase.new.support_db_connection(self) 
end 

class SupportBase 
    def support_db_connection(model_name) 
    db_connection(model_name) 
    end 

private 

    def db_connection(model_name) 
    databases = YAML::load(IO.read('config/database_support.yml')) 
    model_name.establish_connection(databases[Rails.env]) 
    end 
end 

이 나에게로 전환하는 데 도움이 database_support 데이터베이스.

하지만 데이터베이스 이름을 동적으로 변경해야합니다. 내가 아니라 그 방법으로 사용자 모델의 데이터베이스 _를 전달할 수있는 방법 ,

SupportBase.new.support_db_connection(self,database_name) 

또는이 작업을 수행하는 다른 방법이있다.

+0

3, 3.2, 4 레일 버전의 태그가 지정되었습니다. – Nithin

답변

0

development: 
    adapter: postgresql 
    other stuff... 

production: 
    adapter: postgresql 
    other stuff.. 

external: 
..... 

가 그럼 난이 계속 생각하는 그런

class SupportBase < ActiveRecord::Base 
    establish_connection(:external) 
    self.table_name = "your_table" 
end 

방금 ​​

SupportBase.first 

처럼 액세스 할 수있는 클래스를 생성 한 곳 database.yml을에서 구성을 유지 대체 데이터베이스 연결이 열려있을 수 있습니다. ood는 성능을 위해서도 사용할 수 있습니다. AR

동적 인 경우 : database.yml에 많은 환경을 만들고 클래스와 연결하십시오. 너는 그 연결을 가질 것이다.

좀 더 자세한 정보는 blog을 확인하십시오.

편집 : DB에 동적 로딩에서 제안되면, database.yml 파일에 새로운 구성을 작성하고 당신이있는 경우 레일에 두 개의 DB 사이를 전환 할 파일을

+0

귀하의 게시물을 보내 주셔서 감사합니다. 여기서 우리는 database_set을 '외부'클라이언트의 동적 기반으로 만들 수 있습니다. – Dheena

+0

@Dheena 내 편집을 확인하십시오. – Nithin

+0

[x.example.com]의 요청은 x_database에서 데이터를 가져와야하고 [y.example.com]은 y_database에서 데이터를 가져와야합니다. 어떻게 SupportBase.rb의 각 요청을 기반으로 차별화 할 수 있습니다 – Dheena

0

를 사용하여 활성 record.establish_connection 방법을 다시로드 두 DB의 세부 사항.

다음은 코드입니다.

ActiveRecord::Base.establish_connection(
:adapter => "postgres", 
:host  => "host", 
:username => "myuser", 
:password => "mypass", 
:database => "somedatabase" 
) 
+0

내가 요청한 도메인을 기반으로 n 개의 데이터베이스 사이를 전환해야합니다, 그것을 할 수있는 방법이 있습니까. – Dheena

+0

DB-CHARMER gem (http://kovyrin.github.io/db-charmer/)을 사용해 보셨습니까? – Sai

0

사용 AR-문어 보석. 이 시나리오에서는 매우 유용 할 것입니다.

관련 문제