Проблема с потоками в Druby и ActiveRecord
У меня есть приложение rails и отдельный процесс друби. Этот процесс дает мне несколько методов, и в первой строке каждого метода друби есть вызов ActiveRecord::Base.establish_connection, где db_name зависит от параметра, установленного приложением rails. Иногда процесс получает неправильное имя базы данных, и я думаю, что это может быть проблемой параллелизма. Может ли это быть? Любая идея о том, как сделать это потокобезопасным?
Спасибо за любую помощь! Роберто
1 ответ
Да, это проблема параллелизма.
Чтобы это исправить, вам придется немного изменить свою архитектуру, но у меня недостаточно информации.
- Код, работающий в бэкэнде, такой же, как и в вашем приложении rails?
- Используют ли ваши разные базы данных одну и ту же модель?
- Сколько у вас разных баз данных? Это число растет?
По сути, если у вас небольшое и фиксированное количество баз данных, самое простое - использовать разные процессы ruby.
Если у вас разные базы данных с разными моделями, вы можете использовать разные базовые классы:
AppA < ActiveRecord::Base
Model1 < AppA
Model2 < AppA
AppB < ActiveRecord::Base
Model3 < AppB
Тогда вы можете позвонить
AppA.establish_connection(...)
AppB.establish_connection(...)
в разные базы данных.