sql >> Databáze >  >> NoSQL >> MongoDB

Jak vymazat staré/zastarané relace při používání úložiště relací Mongo DB v Ruby on Rails 3.2

Klíčem k vyřešení tohoto problému je pochopení, že použití přímého Mongoid při session_store vaší aplikace Rails 3 je nastaven na mongoid_store by nikdy nedovolil tento druh přímé interakce s databází.

Takže místo toho pomocí Mongoid jen pro základní připojení k databázi, ale pak ve skutečnosti interagovat s Moped jádro Mongoidu přímo na úrovni ovládání ovladače, stejné funkčnosti lze snadno dosáhnout! Zde je mongoid/moped rake úkol, se kterým jsem přišel a který funguje docela dobře:

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

Připojení se nastavuje pomocí db = Mongoid::Sessions.default a kouzlo se odehrává v řádku:

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

Nastavil jsem stale_window variabilní, takže mohu snadno upravit rozsah tohoto úkolu; nastavuje hodnotu DB i popis. Abych to mohl použít, spustím to takto z cesty codebase:

RAILS_ENV=production bundle exec rake sessions:cleanup

A samozřejmě stačí změnit RAILS_ENV hodnota, která odpovídá prostředí, ve kterém chcete, aby tento úkol působil; jako je staging , development nebo jakkoli jinak byste mohli pojmenovat své prostředí. Po spuštění tohoto rake úkol, sessions Kolekce tabulka se ořezává na něco realističtějšího s použitím v reálném světě a celková velikost databáze je rozumnější.




  1. Mongodb nelze spustit kvůli oprávněním WiredTiger.turtle

  2. Jak přimět Evu, aby zapisovala do různých databází na základě různých parametrů URL a hodnot požadavků?

  3. Python &Redis:Osvědčené postupy aplikací pro manažery/pracovníky

  4. Jak znovu připojit klienta redis po restartu/škálování serveru redis