Make the cleanup script work a chunk at a time so we don't run out of

memory when there are lots of sessions.
This commit is contained in:
Tom Hughes 2008-08-08 15:49:29 +00:00
parent 4bc8fcf5b4
commit b8f3742bc3

View file

@ -2,17 +2,27 @@
require File.dirname(__FILE__) + '/../config/environment'
Session.find(:all, :conditions => ["updated_at < ?", 1.week.ago]).each do |session|
begin
if session[:user] and User.find(session[:user])
session.destroy if session.updated_at < 1.month.ago
else
last_session_id = 0
begin
sessions = Session.find(:all,
:conditions => ["updated_at < ? and id > ?", 1.week.ago, last_session_id],
:order => :id, :limit => 1000)
sessions.each do |session|
last_session_id = session.id
begin
if session[:user] and User.find(session[:user])
session.destroy if session.updated_at < 1.month.ago
else
session.destroy
end
rescue Exception => ex
puts "Invalid session #{session.session_id}: #{ex.to_s}"
session.destroy
end
rescue Exception => ex
puts "Invalid session #{session.session_id}: #{ex.to_s}"
session.destroy
end
end
end while sessions.length > 0
UserToken.delete_all("expiry < NOW()")