sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan rydder du gamle/gamle sessioner, når du bruger Mongo DB sessionslagring i Ruby on Rails 3.2

Nøglen til at løse dette er at forstå, at brug af direkte Mongoid metoder, når din Rails 3-applikations session_store er indstillet til mongoid_store ville aldrig tillade denne form for direkte databaseinteraktion at ske.

Så i stedet, ved kun at bruge Mongoid til den grundlæggende databaseforbindelse, men så faktisk interagere med knallert kerne af Mongoid direkte på et driverdriftsniveau, kan den samme funktionalitet opnås med lethed! Her er Mongoid/knallert rake opgave jeg kom på, der fungerer ret godt:

namespace :sessions do
  stale_window = 7
  desc "Clear stale DB sessions older than #{ stale_window } days."
  task :cleanup => :environment do
    db = Mongoid::Sessions.default
    begin
      db[:sessions].where('updated_at' => { '$lt' => stale_window.days.ago }).sort(updated_at: 1).no_timeout.remove_all
    rescue Moped::Errors::SocketError => e
      # Rescue here if needed. If not, the screwed up process dies silently.
    end
  end
end

Forbindelsen indstilles via db = Mongoid::Sessions.default og magien sker i linjen:

db[:sessions].where('updated_at' => { '$lt' => stale_window.days.ago }).sort(updated_at: 1).no_timeout.remove_all

Jeg har indstillet et stale_window variabel, så jeg nemt kan justere rækkevidden af ​​denne opgave; angiver DB-værdien samt beskrivelsen. For at bruge det kører jeg det sådan her fra kodebasestien:

RAILS_ENV=production bundle exec rake sessions:cleanup

Og selvfølgelig skal du bare ændre RAILS_ENV værdi for at matche det miljø, du ønsker, at denne opgave skal handle på; såsom staging , development eller hvad du ellers kunne kalde dit miljø. Efter at have kørt den rake opgave, sessions samlingstabellen bliver beskåret til noget mere realistisk med brug i den virkelige verden, og den samlede databasestørrelse er mere rimelig at håndtere.




  1. Hvorfor anbefales det ikke at starte en solo MongoDB-instans som replikasæt i produktionen?

  2. Hvordan håndterer man mongoose-skemamigreringer korrekt?

  3. Nedsætte værdien i mongodb

  4. Hvordan fjerner man _id i MongoDB og erstatter med et andet felt som en primær nøgle?