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.

1 kommentar: