Настройка подключений к нескольким базам данных в Rails.
Решил сделать перевод на русский язык статьи Setting up multiple databases in Rails: the definitive guide
(By Roberto Ostinelli / December 2, 2015).
Переводчик я непрофессиональный, поэтому в некоторых местах буду позволять себе вольности, но общий смысл будет сохранен.
Статья написана для Rails 4, но работает и в Rails 5 тоже, по крайней мере, на момент перевода статьи.
———————
Может быть множество разных причин, зачем вам может понадобиться подключение к нескольким базам данных в вашем Ruby in Rails приложении. В моём случае необходимо было хранить большое количество данных, отражающих поведение пользователя: клики, посещаемые страницы, изменения истории и т. д.
Такие типы баз данных обычно не критичны для основной цели, а разрастаются намного быстрее (и до гораздо бОльших размеров), чем другие БД.
Требования к ним достаточно разнообразны: к примеру, они требуют больше пространства, более терпимы к аппаратным и программным сбоям, а также у них в приоритете идёт запись в базу, а не чтение. По этим причинам иногда выгодно отделить такие БД от основной базы вашего приложения. Зачастую для таких задач используются нереляционные СУБД, что уже выходит за пределы темы, по которой писалась данная статья.
Я нашел и прочитал множество различных решений, но я так и не смог найти такого, которое бы полностью выполняло следующие условия:
- Должны быть различные и изолированные друг от друга миграции и схемы для каждой базы данных
- Должны использоваться генераторы Rails для создания новых миграций для каждой БД, независимо друг от друга
- Должны присутствовать специфические для баз данных задания rake для основных операций над БД (например такие же, как и для основной БД)
- Должна быть интеграция с заданиями
spec
RSpec’а. - Должно работать с Database Cleaner
- Должно работать на Heroku
Это мой взгляд на то, как удовлетворить все вышеуказанные требования и получить полностью рабочее Rails-приложение с подключением к нескольким БД.