У меня есть приложение ruby on rails, прекрасно работающее и подключенное к базе данных. Теперь я хочу подключиться к другой базе данных из того же приложения. Модель данных может быть точно такой же. На самом деле, если я подключаюсь к другой базе данных, приложение работает нормально. Однако я хочу подключиться к двум различным базам данных. Возможно ли это в рубине на рельсах?
Подключение к нескольким базам данных в рубине на рельсах
Ответ 1
Для множественного подключения к базе данных вам необходимо добавить следующие коды в файл database.yml. Здесь я приведу пример подключения двух баз данных из приложения rails
конфигурации/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. Поэтому для некоторой модели нам нужно подключиться к другой базе данных.
Предположим, что у нас есть две модели User и Category. Таблица users находится в 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
Надеюсь, что это сработает для вас:).
Ответ 2
Используйте 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(...)