Automatyczne kasowanie wpisów

Sprawa przedstawia się tak, że chciałbym, żeby wpisy kasowały się automatycznie bez interwencji ludzkiej 7 dni od daty ich wprowadzenia.
Przeglądałem na toolboksie i są pluginy do crona.

Postanowiłem jednak zapytać tutaj w obrębie waszych doświadczeń jak to najlepiej zrealizować ?

  1. Metoda klasy, ktora usunie wszystkie stare wpisy - 7 dniowe, TEST
  2. gem javan-whenever i wygenerowanie schedule.rb
  3. podpięcie whenevera pod twoj mechanizm deployu by aktualizowal crontaba

Zwykły cron ze skryptem w bashu (jednolinikowym do tego) nawet ktory wywola zapytanie sql. Po co walić z armaty do skowronka. Czy jak to powiedzenie szło.

Ewentulanie cron, który przy pomocy script/runner wywołuje metodę do usuwania.

Czyli jak seban pisze javan-whenever Twoim przyjacielem: uruchamia przy pomocy crona i script/runner twój przetestowany wcześniej kod.

Jednolinijkowy skrypt w bashu z sql słabo się testuje automatycznie i łatwo zapomnieć o tym, że siedzi w crontab. Zdecydowanie odradzam takie rozwiązania ‘na szybko’.

Bragi,seban +1

Trzeba eliminować wszelkie elementy, które nie są wersjonowane w repozytorium kodu i nie masz możliwości ich przetestowania.

Dzęki, użyłem javan-whenever, wygląda że działa, ale chce zrobić usunięcie w zależności.

Wiele prób (poniżej kilka) dokonałem, niestety zawsze usuwa się wszystko, a chcę żeby usunięte zostały wpisy gdzie pole active = 1.

def destroy_all #Cart.destroy_all("active = '1'") #Cart.find(:all,:conditions => "active LIKE '1'").destroy_all #Cart.destroy_all(:active=> "1") end

Hmm, u mnie działa:

  Cart.destroy_all( :active => 1)

Tak naiwnie to to powinno przejść:

def destroy_all Cart.find(:all, :conditions => {:active => 1} ).each(:&destroy) end

moze tak :

def destroy_all Cart.find(:all,:conditions => "active LIKE '1'").each(&:destroy) end

Wygląda na to, że każda odpowiedź jest poprawna.
Błąd był mój bo w tym układzie jak jak mam to powinno być:

 runner "Cart.destroy_all(:active => 1)", :environment => :development

a przedtem miałem:

 runner "Cart.destroy_all", :environment => :development

i myślałem, że destroy_all to z modelu się pobierze, a to się wykonywało.

Dzięki za pomoc

Mam nadzieję, że na serwerze nie używasz “:environment => :development”. W pierwszym poście wspominałeś coś o 7 dniach, zaponniałeś? :wink:

@seban, oczywiście to tylko na razie lokalnie sobie robię więc na tej bazie, a oczywiście sprawa będzie dotyczyć 7 dni, no ale w ramach prób jakoś wygodniej mi było wykorzystać active.
7 dni to już zrobie przez analogie.