2010-12-07 28 views
5

Kullanıcı hesabımı ve oturum verilerini ayrı bir veritabanına taşımaya çalışıyorum, böylece onu birden çok uygulamada paylaşabilmekteyiz.kurmak_connection birleştirmeyi desteklemiyor gibi görünüyor

establish_connection numaralı telefonu kullanan bir kişinin farklı bir db'ye bağlanmasını söyleyen bir çok kişiyi gördüm, ancak bunu işe alamıyorum.

yapılandırma/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 

uygulama/model/user.rb

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

uygulama/model/person.rb

class Person < ActiveRecord::Base 
    belongs_to :user 
end 

Bu çok çalışıyor gibi görünüyor:

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

ve ben izolasyon User sorgulayabilir:

> 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: Ben kırar join kullanmayı deneyin en kısa sürede

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

ama Doğru veriyi yansıtma yoluyla almak yerine geçerli veritabanını kullanıyor gibi görünüyor.

Yaklaşık iki yıl önce bu sorun hakkında this very old bug report buldum, ancak eski ARel sözdizimi ile ilgili neredeyse kesin eminim ve kod örneklerinin artık işe yaradığından şüpheliyim.

Bu mümkün mü?

Güncelleme:

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

ama bu gerçekten sıkıcı ve ben katılmak istiyorum tablolardan biri polimorfik geçerli: bunu yaparak biraz ilerleme yaptı.

Ben ekleyerek denedim:

set_table_name 'project_name.people' 

ama bu O raylar 3. aslında birden çok şema desteklemez geliyor bana

NoMethodError: undefined method `eq' for nil:NilClass 

döndürür. Yanlış mıyım?

+0

2.3 sitemi raylara aktarmaya çalışırken aynı sorunu farkettim3. Arel 2.0.6'nın orijinal veri tabanına bir bağlantı sağladığını ve db'nin kuruluş_kodu ile değiştirildiğini fark etmediği anlaşılıyor. Arel HEAD bir gelişme gibi görünüyor, ama başka hatalar fark ediyorum. Rayları 3.0.4 ... –

+0

'a getirin Rails'in bunu desteklemediğinden eminim. – jschorr

+2

@ Rails API'sındaki karudzo API'sı, ActiveRecord'un birden çok DB kullanmasını desteklediğini söylüyor.Eğer 'join' kullanamazsanız, bu benim kitabımda 'destek' olarak nitelendirilemez. –

cevap

1

Uygulama katmanından çıkarmayı ve yalnızca belirli tabloları yalnızca MySQL çoğaltmasıyla kopyalamayı düşündünüz mü?

+0

Bu gerekli olabilir. Iyi öneri. –

İlgili konular