Ktoś wie w czysty sposób, aby uniknąć ActiveJob::SerializationError
, który występuje podczas próby serializacji obiektu Date
lub Time
?SerializationError Rails ActiveJob Data i godzina
dwóch rozwiązań, jakie miałem do tej pory to:
- połączeń marszałek/JSON/YAML
dump
podczas ładowania argumenty a następnieload
powrotem w pracy (co jest do bani bo muszę małpy łaty praca Mailer) - Monkey łata
Date
iTime
tak:
/lib/core_ext/time.rb
class Time
include GlobalID::Identification
def id
self.to_i
end
def self.find(id)
self.at(id.to_i)
end
end
/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
które zasysa również. Ktoś ma lepsze rozwiązanie?
Czy rzeczywiście należy przekazać tylko datę lub godzinę do pracy (i dlaczego)? Myślę, że byłoby lepiej przekazać ActiveModel jako parametr do zadania, prawdopodobnie zawierający instancję Date lub Time. (ActiveModels to GlobalID :: Identification, dzięki czemu można je szeregować) – sourcx
Nie, to naprawdę nie jest konieczne. To po prostu wygodne. A ponadto działało z DelayedJob zanim zintegrowaliśmy ActiveJob. Więc ... wydaje się głupim, że będę musiał zmienić kod, aby zintegrować się z czymś, co po prostu ma być abstrakcyjne, a nie zmieniać funkcji. – kddeisz
Dodajesz tylko obiekt Date/Time? Nic więcej? AFAIK, ActiveJob w rzeczywistości nazywa Marszałka serializacją twojego obiektu i potrzebuje czegoś takiego jak łatka małpy, którą powiedziałeś, aby móc odzyskać i przypomnieć sobie ten obiekt później. Czy możesz opublikować swój Mailer? – lsdr