Как очистить таблицу сеансов рельсов
Я использую активный магазин записей для хранения сеансов рельсов.
За короткое время размер таблицы sessions
значительно увеличился. Как эти строки сеанса сбрасываются через определенный промежуток времени. Или я должен вручную очищать их один раз в 24 часа?
Ответы
Ответ 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