API Rails 5 - загружать статические страницы, даже если невозможно установить соединение с базой данных

avatar
Hussain Niazi
8 августа 2021 в 19:38
54
1
0

Я пытаюсь найти решение уже 2 дня.

У меня есть Rails API, который подключен к удаленному серверу MySQL. Проблема в том, что когда я отключаю сервер MySQL, все мое приложение перестает работать. Мне нужно решение, в котором мое приложение могло бы изящно возвращать сообщение «База данных недоступна» в формате JSON на любые запросы REST, когда база данных отключена.

В настоящий момент, как только сервер базы данных отключен, я получаю сообщение Не удается подключиться к серверу MySQL на 'XXXX.com' в разработке и 500 внутренний сервер ошибка в рабочей среде.

Мой файл database.yml

default: &default
  adapter: mysql2
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: XXXX
  password: XXXX
  host:  XXXX.com
  port: 3306
  encoding: utf8mb4

development:
  <<: *default
  database: geodatabase

test:
  <<: *default
  database: geodatabase_test

production:
  <<: *default
  database: geodatabase_production

Я помню, как несколько лет назад, работая над рельсами, любые проблемы с базой данных по-прежнему нормально отображали статические страницы. Я не понимаю, почему сейчас это не работает.

Спасибо

Источник

Ответы (1)

avatar
Sanjay Prajapati
10 августа 2021 в 10:01
1

Если соединение с базой данных не работает, Rails выдает это исключение ActiveRecord::ConnectionNotEstablished

Вы можете обработать это исключение, используя приведенный ниже код

В файле application_controller.rb можно поместить под чертой. Это должна быть первая строка.

rescue_from ActiveRecord::ConnectionNotEstablished, with: :db_connection_error

def db_connection_error
  render json: { error: "DB connection refused" }, status: 503
end