문제

이 주제에 대한 기존 질문/스레드를 많이 읽었지만 다음 사항을 명심하세요. 없음 그들 중 일부는 내 문제를 직접적으로 해결했습니다.또한 이것이다는 것을 명심하십시오. 아니다 DB 정보를 미리 알 수 없기 때문에 Database.yml의 상황입니다.

즉, 다음 문제에 대한 솔루션이 필요합니다. 동적으로 Rails 앱에서 여러 데이터베이스에 연결합니다.내 상황은 간단한 데이터 테이블(EVENTS, TIMESTAMP, VALUE)이 있는 여러 데이터 로깅 사이트를 가지고 있다는 것입니다.이러한 사이트는 이를 사용해야 하는 로컬 애플리케이션으로 인해 그대로 유지되어야 하며 앞으로도 그럴 것입니다.

나에게 필요한 것은 "MYSQL_LOGINS" 테이블을 유지 관리하고 각 로그인을 사용하여 다양한 데이터베이스 중 하나에 연결하고 그 안에 있는 데이터에 대한 차트/그래프를 제공하는 응용 프로그램을 만드는 것입니다.

내 "데이터" 모델은 내가 연결하는 모든 MySQL 데이터베이스에 대해 동일하게 유지됩니다. 간단히 내 MODEL에게 즉시 다른 DB에 연결하도록 지시할 수 있어야 합니다.나는 이것이 놀랍도록 간단하기를 바라지만, 우리는 보게 될 것입니다.

도움이 되었습니까?

해결책

당신이 원하는 ActiveRecord::Base#configure_connection.수동 연결을 사용하는 모델이 애플리케이션의 나머지 부분에서 사용하는 연결을 방해하지 않도록 추상 하위 클래스에서 이를 사용하고 싶을 것입니다.

class LogBase < ActiveRecord::Base
  self.abstract_class = true
end

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

수동으로 연결하는 모델이 하나만 있는 경우 추상 클래스는 필요하지 않습니다.

연결할 수 있는 전체 데이터베이스 세트를 알고 계십니까?그렇다면, Database.yml이 여전히 유용할 수 있습니다.모든 정보를 디렉터리에 넣어 각 데이터베이스에 이름을 지정한 다음 해당 이름을 사용하여 응용 프로그램에서 확립할 데이터베이스를 동적으로 선택할 수 있습니다.

# database.yml
atlanta:
  host: atlantadb.foo.com

# foo.rb
LogItem.establish_connection :atlanta

연결 설정은 꽤 무거울 수 있으며, 사이트가 광역 네트워크로 분리되어 있는 경우에는 두 배로 커집니다.추출-변환-로드 접근 방식을 사용하고 시간별/일별 크론 작업을 사용하여 데이터를 중앙 보고 사이트에 복사하는 것이 더 합리적인지 고려해 보겠습니다.이는 데이터 웨어하우스의 가장 기본적인 형태이며 매우 일반적으로 사용되는 접근 방식입니다.MySql을 사용하는 경우, Maatkit 동기화 테이블용 rsync와 같은 깔끔하고 작은 도구입니다.또는 마스터-슬레이브 복제를 지원하는 데이터베이스를 사용할 수도 있지만 유지 관리가 상당히 복잡할 수 있습니다.

다른 팁

Rails는 아직 상자 밖에서 여러 데이터베이스를 지원하지 않습니다 (아는 사람은 절대 없을 수도 있습니다). 해당 모델의 ActiveRecord에서 데이터베이스 연결을 도용해야합니다.

여기 이것에 대한 활성 레코드 문서이며 여기에 다음과 같습니다. 특정 문서 당신은 무시해야합니다.

이것 프로세스를 잘 설명하는 것입니다.

또한 있습니다 약간 반 프로덕션 준비 프로젝트 이 문제를 공격합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top