Подтвердить что ты не робот

Подключение к нескольким базам данных в рубине на рельсах

У меня есть приложение ruby ​​on rails, прекрасно работающее и подключенное к базе данных. Теперь я хочу подключиться к другой базе данных из того же приложения. Модель данных может быть точно такой же. На самом деле, если я подключаюсь к другой базе данных, приложение работает нормально. Однако я хочу подключиться к двум различным базам данных. Возможно ли это в рубине на рельсах?

4b9b3361

Ответ 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(...)