Wer weiß von einem sauberen Weg, um die ActiveJob::SerializationError
zu vermeiden, die beim Versuch auftritt, ein Date
oder Time
Objekt zu serialisieren?SerializationError Rails ActiveJob Uhrzeit und Datum
Die beiden Lösungen, die ich bisher gehabt haben sind:
- Anruf Marshal/JSON/YAML
dump
wenn die Argumente zu laden und dannload
zurück in den Job (die saugt, weil ich Affe muss der Patch Mailer Job) - Affe Patch
Date
undTime
wie so:
/lib/core_ext/time.rb
/lib/core_ext/date.rb
class Date
include GlobalID::Identification
def id
self.to_time.id
end
def self.find(id)
Time.find(id).to_date
end
end
Welche auch saugt. Hat jemand eine bessere Lösung?
Ist es wirklich notwendig, nur ein Datum oder eine Uhrzeit an den Job zu übergeben (und warum)? Ich denke, es wäre besser, ein ActiveModel als Parameter an den Job zu übergeben, der möglicherweise eine Datums- oder Zeitinstanz enthält. (ActiveModels enthalten GlobalID :: Identification, damit sie serialisierbar sind) – sourcx
Nein, das ist nicht wirklich notwendig. Es ist einfach praktisch. Darüber hinaus hat es mit DelayedJob funktioniert, bevor wir ActiveJob integriert haben. Also ... es scheint doof, dass ich meinen Code ändern müsste, um mich mit etwas zu verbinden, das einfach abstrahieren sollte, im Gegensatz zur Änderungsfunktionalität. – kddeisz
Sie können nur das Date/Time-Objekt in die Warteschlange stellen. Nichts anderes? AFAIK, ActiveJob ruft tatsächlich Marshal auf, um Ihr Objekt zu serialisieren und benötigt etwas wie den Affen-Patch, von dem Sie sagten, dass er dieses Objekt später abrufen und abrufen kann. Kannst du deinen Mailer posten? – lsdr