MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wyczyścić stare/nieaktualne sesje podczas korzystania z przechowywania sesji Mongo DB w Ruby on Rails 3.2?

Kluczem do rozwiązania tego problemu jest zrozumienie, że użycie bezpośredniego Mongoid metody, gdy session_store Twojej aplikacji Rails 3 jest ustawiony na mongoid_store nigdy nie pozwoliłaby na taką bezpośrednią interakcję z bazą danych.

Zamiast tego, używając Mongoid tylko do podstawowego połączenia z bazą danych, ale następnie wchodząc w interakcję z Mopedem rdzeń Mongoid bezpośrednio na poziomie obsługi sterownika, tę samą funkcjonalność można osiągnąć z łatwością! Oto Mongoid/Moped rake zadanie, które wymyśliłem, działa całkiem dobrze:

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

Połączenie jest ustawiane przez db = Mongoid::Sessions.default i magia dzieje się w linii:

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

Ustawiłem stale_window zmienna, dzięki czemu mogę łatwo dostosować zakres tego zadania; ustawia wartość DB oraz opis. Aby go użyć, uruchamiam go w ten sposób ze ścieżki bazy kodu:

RAILS_ENV=production bundle exec rake sessions:cleanup

I oczywiście po prostu zmień RAILS_ENV wartość dopasowana do środowiska, w którym ma działać to zadanie; takie jak staging , development lub jakkolwiek inaczej nazwiesz swoje środowisko. Po uruchomieniu tego rake zadanie, sessions tabela kolekcji zostaje przycięta do czegoś bardziej realistycznego w rzeczywistych zastosowaniach, a ogólny rozmiar bazy danych jest bardziej rozsądny.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zaktualizować głęboko zagnieżdżoną tablicę za pomocą C# MongoDB.Driver?

  2. Jak skonfigurować indeksy mongoDB w django-nonrel bez używania modeli?

  3. Jak serializować pola chrono::DateTime jako ISODate podczas używania prototypu sterownika Rust Mongo?

  4. Przeformatuj kolekcję za pomocą potoku agregacji w Mongodb

  5. Jak zdefiniować okrąg dla schematu mongo db?