Как удалить сеанс Rails (ActiveRecord) в конце запроса

Мы используем Rails с камнями devise и cancancan. Наши пользовательские сессии хранятся с использованием ActiveRecord SessionStore.

В нашем коде переднего плана (JavaScript) мы недавно начали использовать веб-работников для выполнения запросов Ajax к нашему бэкэнду. Это означает, что эти запросы больше не попадают в тот же сеанс, что и запросы из основного потока.

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

Мы можем определить запросы от веб-работников, когда они получены на серверной части.

Одним из способов удаления нежелательных записей будет

  1. создайте наш собственный класс SessionStore и добавьте атрибут, чтобы указать временный характер определенных сеансов
  2. иметь запланированное задание удалить эти записи.

Мы бы посчитали это "планом Б".

Мы бы предпочли удалить временную сессию в конце обработки запроса. Мы добавили код для уничтожения сеанса в after_action контроллера приложения;

# application_controller.rb
after_action :clean_temporary_session

def clean_temporary_session
  session.destroy if is_temporary_session?
end

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

Как мы удаляем временную запись сеанса в конце запроса?

0 ответов

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