delayed_jobs speichert abgeschlossene Jobs

8

Gibt es einen Parameter, den ich an delayed_job übergeben kann, um zu verhindern, dass abgeschlossene Jobs aus der Tabelle delayed_jobs gelöscht werden?

Art von destroy_failed_jobs , aber für abgeschlossene Jobs

irgendwelche Ideen?

    
Ran 15.09.2011, 13:48
quelle

3 Antworten

4

Es scheint nicht so. Aus der README: Ссылка

  

Standardmäßig werden fehlgeschlagene Jobs gelöscht (und es wird immer gelöscht)   erfolgreiche Jobs). Wenn Sie fehlgeschlagene Jobs behalten möchten, legen Sie fest   Verzögert :: Job.destroy_failed_jobs = false. Die fehlgeschlagenen Jobs werden sein   markiert mit Nicht-Null failed_at.

Sie müssten wahrscheinlich in die destroy-Methode einhaken, so dass der Job in eine andere, separate Tabelle kopiert wird, die die Liste der abgeschlossenen Jobs für Sie speichert oder einfach protokolliert, welche Jobs in einer Datei ausgeführt wurden ist alles was du brauchst.

Was Sie nicht wollen, ist, die Jobs in der Tabelle delayed_jobs zu belassen, und zwar aus mehreren Gründen. Erstens, weil delayed_jobs diese Tabelle als TODO-Liste verwendet - Sie möchten, dass nur noch Dinge erledigt werden müssen. Zweitens, wenn Sie es gehackt haben, um alle Jobs in der gleichen Tabelle zu behalten, wächst die Tabelle delayed_jobs nur, was die Verarbeitung von delayed_jobs im Laufe der Zeit verlangsamen würde, wie die Abfrage, um Jobs zu finden, die noch nicht haben abgeschlossen wurden, müssten diejenigen filtern, die haben.

    
jefflunt 15.09.2011, 13:54
quelle
6

Erweiterung auf @ Jeffflunts Antwort.

Ich habe eine Migration hinzugefügt, um eine Tabelle zu erstellen, die die abgeschlossenen Jobs enthält

%Vor%

Dann ein Modul

%Vor%

Schließlich wurde der Hook dem Job hinzugefügt, den ich speichern möchte

%Vor%

Da ich mehr als einen Job habe, habe ich die Erfolgsmethode hook in ein Modul eingefügt und in alle Jobs aufgenommen, die ich speichern möchte. (Hinweis: einige sind es nicht wert, gespeichert zu werden)

    
natedavisolds 29.01.2015 14:59
quelle
0

Sie könnten etwas wie acts_as_paranoid verwenden.

Grundsätzlich funktioniert das so:

  • #destroy wird überschrieben, so dass Datensätze nicht aus der Datenbank gelöscht werden, sondern stattdessen ein deleted_at-Zeitstempel festgelegt wird
  • Es wird ein Standardbereich installiert, sodass .find (und alle seine Varianten) keine Elemente aus der Datenbank zurückgeben, für die der deleted_at-Zeitstempel festgelegt ist

Hier ist eine Einführung: Ссылка

Vorsicht: acts_as_paranoid ist sehr alt und es gibt vielleicht bessere Lösungen, also schaut euch Ссылка

an     
severin 10.11.2011 10:03
quelle

Tags und Links