Кто-нибудь знает о чистом способе избежать ActiveJob::SerializationError
, который возникает при попытке сериализации объекта Date
или Time
?SerializationError Rails ActiveJob Время и дата
два решений, которые я имел до сих пор является:
- вызова маршал/JSON/YAML
dump
при загрузке аргументов, а затемload
назад в Иове (который сосет, потому что мне нужно обезьяне патчить почтовик работа) - обезьяны патч
Date
иTime
так:
/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
Который также сосет. У кого-то есть лучшее решение?
Действительно ли необходимо передать только дату или время на работу (и почему)? Я думаю, было бы лучше передать ActiveModel в качестве параметра для задания, возможно, содержащего экземпляр Date или Time. (ActiveModels включают GlobalID :: Идентификация, поэтому они сериализуются) – sourcx
Нет, это не обязательно. Это просто удобно. И вдобавок ко всему, он работал с DelayedJob, прежде чем мы интегрировали ActiveJob. Итак ... кажется глупым, что мне нужно будет изменить свой код, чтобы интегрироваться с чем-то, что просто должно абстрагироваться, а не изменять функциональность. – kddeisz
Вы только ставите в очередь объект Date/Time? Ничего больше? AFAIK, ActiveJob на самом деле называет маршала сериализовать ваш объект и нуждается в чем-то вроде патча обезьяны, который, как вы сказали, сможет восстановить и вспомнить этот объект позже. Можете ли вы разместить свой Mailer? – lsdr