Ich verwende das Plugin für verzögerte Jobs für Rails 2, und jedes Mal, wenn ich versuche, ein Modell zu modifizieren und es in der von verzögerten Jobs benötigten "Ausführen" -Methode zu speichern, schlägt es fehl (keine Fehlermeldungen oder irgendetwas, es ist nur aufgeführt) als ein Fehler in der Datenbank).Verzögerte Jobs auf Rails 2: kann nicht in "perform" -Methode speichern/wissen, wann der Job erledigt ist?
Ich habe die „perform“ Verfahren in einem meiner Schienen-Modelldateien (Video), und ich vorbei eine Instanz dieses Modells (@video, sagen wir mal) der verzögerten :: Job.enqueue
Ist es ein bekanntes Problem, dass Sie keine Datenbankänderungen in der Warteschlange vornehmen können? Mache ich etwas falsch (es schlägt nur fehl, wenn es versucht zu speichern, nicht wenn ich die Attribute tatsächlich ändere, und das klingt wie ein Datenbankmodifikationsproblem).
Wenn dies erwartet wird: Wie kann ich es beheben? Ich versuche, ein "done" -Attribut auf "true" zu speichern, damit ich weiß, wann das Modell bereit ist, um zum nächsten Schritt zu gelangen. Gibt es einen Standardweg, um herauszufinden, wann ein verzögerter Job ausgeführt wird?
EDIT: Ich habe bestätigt, dass der Aufruf von Standalone (ohne verzögerten Job) keine Probleme mit dem Speichern hat (keine Fehler oder Warnungen oder irgendetwas). Wenn ich es über DelayedJobs anrufe, schlägt es SOFORT (keine Zeitüberschreitung) in der Sekunde, in der es die Speicherzeile erreicht.
EDIT: Warte, ich denke, ich sehe, was los ist: meine "perform" ist Teil eines "after_create" -Rückrufs ... Was ist alles gut und gut, bis ich versuche zu speichern. Es sieht so aus, als wenn ich speichere, es ruft WIEDER auf (während es bereits ausgeführt wird), und das fliegt nicht mit verzögerten Aufträgen (noch sollte es). Aus irgendeinem Grund dachte ich, dass after_create nur einmal aufgerufen wird (nicht nach jedem Speichern). Warte, ein einfacher Test hat gerade gezeigt, dass das der Fall ist. Hrrm ... Also warum wird die Performance zweimal aufgerufen, wenn ich speichere, und einmal, wenn ich nicht in verzögerten Jobs bin?
Mein Code:
after_create :start_transcodes
def start_transcodes
Delayed::Job.enqueue self
end
def perform
puts "performing"
self.flash_status = 100
self.save!
puts "done"
end
Was ich sehe:
performing
performing
2 jobs processed at 3.3406 j/s, 2 failed ...
ich es nicht sehen "done" sagen eh und je.
Was ich sehe in meinen Schienen log ist:
"* [JOB] Video failed with NameError: undefined local variable or method `flush_deletes' for #<Paperclip::Attachment:0xb6e51da0> - 2 failed attempts
undefined local variable or method `flush_deletes' for #<Paperclip::Attachment:0xb6e51da0>"
ich für diese Klasse die Büroklammer Plugin verwende, und ich rufe den ganzen Tag retten kann (auch in diesem Verfahren durchführen) und keine Probleme bekommen. Ich kann auch speichern (wieder, auch in der Ausführung) den ganzen Tag aufrufen und sehe meine Methode "after_create" nicht mehr als einmal aufgerufen - WENN ich einen verzögerten Job verwende. (Könnte es eine Art automatischer Wiederholung versuchen?)
Ich werde mich um mein Paperclip-Plugin kümmern, sehen, was passiert ...
Aber wenn ich "ausführen" alleine (ohne verzögerte Jobs) laufen, nichts schief geht, nichts scheitert oder Fehler oder nichts. Wenn es nur Probleme mit verzögerten Jobs hat, bedeutet das nicht, dass es ein verzögertes Jobproblem ist? Ich überprüfe die Log-Dateien, danke für den Tipp. – Jenny
Äh, es gibt keine Datei "delayed_job.log". Haben Sie darüber gesprochen, wie der verzögerte Job in die normale Rails Log-Datei schreibt (in diesem Fall das Entwicklungsprotokoll?)? Wenn ja, wie ich sagte, bekomme ich keine Fehlermeldungen, es sagt nur "2 Jobs bei 0,2683 j/s verarbeitet, 2 fehlgeschlagen ... " Warten ... zwei Jobs? Ich denke ich verstehe, gib mir eine Sekunde ... – Jenny