2009-02-09 4 views
1

난 레일 응용 프로그램과 별도의 druby 프로세스가 있습니다. 이 프로세스는 나에게 몇 가지 메소드를 제공하며, 각 druby 메소드의 첫 번째 행에는 ActiveRecord :: Base.establish_connection을 호출한다. 여기서 db_name은 레일스 애플리케이션에 의해 설정된 param에 의존한다. 프로세스가 잘못된 데이터베이스 이름을 얻는 경우가 있으며 동시성 문제 일 수 있습니다. 그럴 수 있니? thread-safe로 만드는 방법에 대한 아이디어가 있습니까?Druby 및 ActiveRecord의 스레드 문제

도움 주셔서 감사합니다. Roberto

답변

0

예, 이것은 동시성 문제입니다.

해결하려면 아키텍처를 조금 변경해야하지만 정보가 충분하지 않습니다.

  • 백엔드에서 실행중인 코드는 레일즈 응용 프로그램에서 실행중인 코드와 동일합니까?
  • 다른 데이터베이스가 동일한 모델을 사용합니까?
  • 몇 개의 데이터베이스가 있습니까? 이 숫자가 커지나요?

기본적으로 데이터베이스 수가 작고 고정 된 숫자 인 경우 다른 루비 프로세스를 사용하는 것이 가장 간단합니다. 당신은 다른 모델과 다른 데이터베이스가있는 경우

, 당신은 계획하고 다른 기본 클래스를 사용할 수 있습니다 :

AppA < ActiveRecord::Base 
Model1 < AppA 
Model2 < AppA 

AppB < ActiveRecord::Base 
Model3 < AppB 

그런 다음 서로 다른 데이터베이스에

AppA.establish_connection(...) 
AppB.establish_connection(...) 

를 호출 할 수 있습니다.

+0

또한 글로벌 뮤텍스를 추가하여 drb 요청을 직렬화 할 수 있지만 속도를 제한 할 수 있습니다. – zimbatm