David skriver om livet som egenföretagare, goda vanor, mac, ruby on rails, smarta lösningar och andra sporadiskt påkomna saker
lördag 14 juli 2007
Rensa ut inaktiva sessioner med Ruby on Rails
Om du har gått från PHP till Ruby on Rails kanske du är van vid att sessioner plockas bort automagiskt av PHP efter ett tag. I Ruby on Rails ligger sessionerna kvar tills du väljer att plocka bort dem. Det innebär att du enkelt kan bestämma sessionslängden för varje applikation. Det trixiga är att du måste komma ihåg att göra det.
Så här gör jag för att plocka bort inaktiva sessioner:
# /app/models/session_cleaner.rb
class SessionCleaner
def self.destroy_all
CGI::Session::ActiveRecordStore::Session.delete_all(['updated_at < ?', 60.minutes.ago])
end
end
Sedan sätter du ett schemalagt jobb som körs en gång i timmen eller kvarten eller vad som passar dig bäst. Här är det jag använder.
*/15 * * * * ruby /sökväg/till/applikationen/script/runner -e production "SessionCleaner.destroy_all"
Det här förutsätter förstås att du använder ActiveRecordStore för att lagra sessioner. Om du kör med filbaserade sessioner är det dags att gå över till att köra mot databasen nu.
Tipset kommer ursprungligen från RealityForge, men deras variant har en bugg som gör att det inte fungerar direkt.
Prenumerera på:
Kommentarer till inlägget (Atom)
Tack, det fungerar klockrent!
SvaraRadera