Rails - ActiveRecord :: ConnectionNotEstablished. Как обработать создание объекта на подчиненном сервере? - PullRequest
0 голосов
/ 20 апреля 2020

У нас есть 2 сервера: master и slave сервер. slave сервер в основном используется для обработки отчетов. Все длительные фоновые процессы передаются на сервер slave. Мы используем sidekiq для фоновой обработки.

Теперь, когда отчет готов, мы создаем объект Download, к которому прикреплен сгенерированный отчет. Поскольку процесс выполняется в slave, нам нужно подключиться к master, чтобы создать Download объект. Код выглядит примерно так:

connection = MasterDbConnectionService.connect(tenant_name)
Download.create!(time_taken: time_taken, file: file) # Pseudo code
# Disconnect from the previously established connection
MasterDbConnectionService.disconnect(connection)

Но мы периодически сталкиваемся с

ActiveRecord :: ConnectionNotEstablished) "Не найден пул соединений с" первичным ".

Теперь, когда возникает это исключение, sidekiq повторяет задание и, таким образом, делает его крайне неэффективным. Я понимаю, что мы можем спасти исключение, но если соединение не будет установлено, мы не сможем создать объект Download.

Одно из решений, которое приходит мне в голову, - это спасти исключение и продолжать попытки в течение 5 * 10 секунд. Но, похоже, это неправильный путь. Так какой должен быть подход к решению этой проблемы? Сценарий? Кто-нибудь?

Спасибо

...