5

사용자 계정과 세션 데이터를 별도의 데이터베이스로 이동하려고하므로 결국 여러 응용 프로그램간에 공유 할 수 있습니다.establish_connection이 조인을 지원하지 않는 것 같습니다.

온라인으로 많은 사람들이 establish_connection을 사용하여 모델에 다른 데이터베이스에 연결하도록 알려주고 있지만이 기능을 사용할 수는 없습니다.

설정/database.yml을

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    pool: 5 
    host: localhost 
    database: project_name_development 

authentication: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: true 
    pool: 5 
    host: localhost 
    database: authentication 

응용 프로그램/모델/user.rb

class User < ActiveRecord::Base 
    establish_connection :authentication 
    has_one :person 
end 

응용 프로그램/모델/person.rb

class Person < ActiveRecord::Base 
    belongs_to :user 
end 

이 많이 작동하는 것 같군 :

> User.connection.instance_eval { @config[:database] } 
=> "authentication" 
> Person.connection.instance_eval { @config[:database] } 
=> "project_name_development" 

을 나는 고립 User을 조회 할 수 있습니다

> User.joins(:person) 
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'authentication.people' doesn't exist: SELECT `users`.* FROM `users` INNER JOIN `people` ON `people`.`user_id` = `users`.`id` 

ARel을 : 나는 그것을 나누기 join를 사용하려고 즉시

> User.where(:admin => true) 
=> [ ... lots of results .. ] 

하지만, 반영을 통해 올바른 데이터베이스를 얻는 대신 현재 데이터베이스를 사용하는 것 같습니다.

거의 2 년 전이 문제에 대해 this very old bug report이 발견되었지만 이전 ARel 구문과 관련하여 거의 확실합니다. 코드 예제가 더 이상 작동하지 않을 것입니다.

이것도 가능합니까?

업데이트는 :

User.joins("INNER JOIN project_name.people ON project_name.people.user_id = authentication.users.id") 

을하지만 정말 지루, 내가 가입하고자하는 테이블 중 하나가 다형성 :이 작업을 수행하여 약간의 전진했다.

내가 추가하는 시도 :

set_table_name 'project_name.people' 

을하지만 Rails3 실제로 여러 스키마를 지원하지 않는 날 것으로 보인다

NoMethodError: undefined method `eq' for nil:NilClass 

를 반환합니다. 내가 잘못?

+0

내 2.3 사이트를 rails3에 이식하려고 할 때 동일한 문제가 있음을 확인했습니다. Arel 2.0.6은 원래 데이터베이스에 대한 연결을 유지 관리하고 db가 establish_connection을 사용하여 변경 될 때를 알지 못합니다. Arel HEAD가 개선 된 것처럼 보이지만 다른 오류를 발견했습니다. 레일 3.0.4 가져 오기 ... –

+0

레일 정말 지원하지 않습니다. – jschorr

+2

@karudzo Rails API 문서에서는 ActiveRecord가 여러 DB 사용을 지원한다고 말합니다.'join '을 사용할 수 없다면 그건 내 책에서'지원 '으로 인정받지 못합니다. –

답변

1

앱 계층에서 제거하고 MySQL 복제에서만 특정 테이블을 복제하는 것에 대해 생각해 보셨습니까?

+0

필요할 수 있습니다. 좋은 제안. –