У меня есть приложение ruby on rails, работающее нормально и подключенное к базе данных. Теперь я хочу подключиться к другой базе данных из того же приложения. Модель данных может быть точно такой же. На самом деле, если я подключаюсь к другой базе данных, приложение работает нормально. Однако я хочу подключиться к двум различным базам данных. Возможно ли в рубине на рельсах?Подключение к нескольким базам данных в ruby on rails
ответ
Использование establish_connection
для переключения на другую базу данных:
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "myuser",
:password => "mypass",
:database => "somedatabase"
)
Вы также можете передать предварительно сконфигурированный среду от database.yml так:
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env'])
Вы также можете установить его для конкретной модели :
MyClass.establish_connection(...)
Thank вы! Для подключения к отдельной базе данных за пределами активного класса записи требуется «ActiveRecord :: Base.configurations ['other_env']', в противном случае она фактически не загружает конфигурацию. – KPheasey
Для подключения нескольких баз данных необходимо добавить fo llowing коды в файл database.yml. Здесь я привожу пример соединения двух баз данных из приложения рельсов
конфигурации/database.yml
development:
adapter: mysql2
database: db1_dev
username: root
password: xyz
host: localhost
development_sec:
adapter: mysql2
database: db2_dev
username: root
password: xyz
host: localhost
production:
adapter: mysql2
database: db1_prod
username: root
password: xyz
host: your-production-ip
production_sec:
adapter: mysql2
database: db2_prod
username: root
password: xyz
host: your-production-ip
Здесь я использовал две базы данных для среды разработки и производства.
Теперь нам нужно подключить модель к базам данных. Когда вы запускаете свое приложение в режиме разработки и производства, все модели будут отображаться с помощью параметров разработки и производства db, упомянутых в вашей базе данных.yml. Поэтому для некоторой модели нам нужно подключиться к другой базе данных.
Предположим, что у нас есть две модели пользователя и категории. Таблица пользователей находится в db1_dev и db1_prod, таблице категорий в db2_dev и db2_prod.
Категория модель
class Category < ActiveRecord::Base
establish_connection "#{Rails.env}_sec"
end
Аналогично, при добавлении новой миграции во второй базе данных, необходимо добавить следующий код к нему.
class CreateRewards < ActiveRecord::Migration
def connection
ActiveRecord::Base.establish_connection("#{Rails.env}_sec").connection
end
def change
# your code goes here.
end
end
Надеюсь, что это сработает для вас :).
Возможный дубликат: http://stackoverflow.com/questions/6122508/connecting-rails-3-1-with-multiple-databases – voondo
http://imnithin.github.io/multiple-database.html – Nithin