Я пытаюсь переместить мою учетную запись пользователя и данные сеанса в отдельную базу данных, чтобы мы могли поделиться ею в нескольких приложениях.install_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.where(:admin => true)
=> [ ... lots of results .. ]
, но как только я пытаюсь использовать join
он ломает:
> 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 похоже, использует текущую базу данных вместо того, чтобы получать правильное отражение.
Я нашел this very old bug report почти два года назад об этой проблеме, но я почти уверен, что это касается старого синтаксиса ARel, и я действительно сомневаюсь, что примеры кода будут работать больше.
Возможно ли это?
Update: сделал небольшой прогресс, делая это:
User.joins("INNER JOIN project_name.people ON project_name.people.user_id = authentication.users.id")
, но это действительно утомительно, и одна из таблиц, которые я хотел бы присоединиться к полиморфным.
Я попытался добавить:
set_table_name 'project_name.people'
но возвращает
NoMethodError: undefined method `eq' for nil:NilClass
Мне кажется, что Rails3 фактически не поддерживает несколько схем. Я ошибаюсь?
Я заметил ту же проблему при попытке перенести мой сайт 2.3 на rails3. Кажется, что Arel 2.0.6 поддерживает соединение с исходной базой данных и не понимает, когда db изменен с помощью connection_connection. Кажется, что Areel HEAD улучшается, но я замечаю другие ошибки. Возьмите рельсы 3.0.4 ... –
Я уверен, что Rails этого не поддерживает. – jschorr
@karudzo В документах Rails API говорится, что ActiveRecord поддерживает использование нескольких БД.Если вы не можете использовать 'join', это не относится к« поддержке »в моей книге. –