Проблема с потоками в 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(...)

в разные базы данных.

Другие вопросы по тегам