2017-04-02 3 views
1

최근에 우리는 검색/읽기 연산의 일부로 슬레이브 데이터베이스를 사용하려고 생각했습니다. 우리는 우리의 모든 읽기 요청을 노예에게 보낼 계획이 없습니다. 슬레이브 데이터베이스에서 검색 쿼리를 거의 사용하지 않기를 원합니다.Octopus gem이 활성 레코드 관계로 작동하지 않음

사용 가능한 거의 모든 보석을 시도했지만 octopus, octoshark, db-charmer, makara, knockoff,하지만 아무도 올바르게 작동하지 않습니다.

For example on Octopus (other gems too)는 아래 큰 문제

Octopus.using(:slave1) do User.first end입니다.

잘 작동하고 "slave1"을 사용합니다.

하지만 아래가 왜 작동하지 않는지 확실하지 않습니다.

Octopus.using(:slave1) do User.where(id: 1) end

이 사람은 SLAVE1를 사용하지 않는하지만 마스터 데이터베이스에 발사하고 우리의 검색 쿼리의 대부분이이 형식으로되어 있습니다.

지금까지 매우 실망 스럽습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

User 모델에서 직접 데이터베이스 연결을 설정해보십시오.

class User < ActiveRecord::Base 
    octopus_establish_connection(db_url_to_slave) 
    .. 
end 

것은 우리는 현재 생산에 문어를 사용하고 난 where 사용 사례는 우리를 위해 작동 확신한다 : P이 section in the docs이 접근 방식을 자세히

을, 더 많은 정보를 원하는 경우.

0

많은 어려움 끝에 User.where(id: 1)은 활성 레코드 관계를 만들었지 만 쿼리는 octopus 외부에서 실행됩니다. 그래서 User.where(id: 1).to_a을했을 때 마술처럼 모든 것이 저에게 잘 돌아 가기 시작했습니다.

나는이 트릭과 함께 작동하는 대부분의 것들을 시도했다. 알아 내는데 많은 시간이 걸렸습니다.