Подтвердить что ты не робот

Как очистить таблицу сеансов рельсов

Я использую активный магазин записей для хранения сеансов рельсов.

За короткое время размер таблицы sessions значительно увеличился. Как эти строки сеанса сбрасываются через определенный промежуток времени. Или я должен вручную очищать их один раз в 24 часа?

4b9b3361

Ответ 1

Хорошее сообщение в блоге о вашей проблеме: http://blog.brightbox.co.uk/posts/clearing-out-rails-sessions

Решение состоит в создании пользовательской задачи rake:

task :clear_expired_sessions => :environment do
    sql = 'DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 1 DAY);'
    ActiveRecord::Base.connection.execute(sql)
end

... и запускайте его каждый день с помощью задания cron.

Ответ 2

Используйте стандартный вызов ActiveRecord в Rails 3.2. Для даты передайте значение, соответствующее длине вашей "Запомнить меня". В моем примере это очистит ВСЕ сеансы, которые неактивны в течение двух недель.

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 2.weeks.ago])

Как указано в @journeyer ниже, при использовании драгоценного камня Devise можно ссылаться на конфигурацию Devise.

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", Devise.remember_for.ago])

Если вы используете драгоценный камень Колдовства, можно обратиться к конфигурации Волшебства.

ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", User.sorcery_config.remember_me_for.ago])

Ответ 3

Когда вы вызываете reset_session, рельсы удалят эту строку из таблицы сеанса. Однако не каждый сеанс будет иметь вызов reset_session: если пользователь закрывает свой браузер без выхода из системы, браузер отбрасывает куки файл сеанса, так что строка сеанса никогда не будет использоваться снова, но reset_session не будет вызываться.

Рельсы не очистят, что накапливают рывок для вас - это зависит от вас, чтобы вы делали любое домашнее хозяйство на нем, как вы сочтете нужным. В предыдущем задании мы используем для запуска cronjob, который удалил старые строки сеанса.

Ответ 4

Я бы рекомендовал очистить сеансы рельсов с помощью задания cron или чего-то еще. Может быть, не 24 часа, зависит от того, как долго вы хотите, чтобы пользовательские сессии были доступны. Rails обеспечивает задачу rake для этого

rake db: сеансы: clear