2015-02-17 2 views
2

Чтобы проверить, что мои письма отправляются, я запускаю heroku run rails c -a my_app. Затем я запускаю задание, и оно завершено в порядке. Однако, когда я перехожу к Redis и вижу задания в очереди, работа там не существует. Вместо этого он «повторяет».Activejob не удаляет десериализацию объекта

Это то, что я вижу:

{"retry":true,"queue":"default","class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","args":[{"job_class":"SendMailJob","job_id":"4b4ba46f-94d7-45cd-b923-ec1678c73076","queue_name":"default","arguments":["any_help",{"_aj_globalid":"gid://gemfeedapi/User/546641393834330002000000"}]}],"jid":"f89235d7ab19f605ed0461a1","enqueued_at":1424175756.9351726,"error_message":"Error while trying to deserialize arguments: \nProblem:\n Document(s) not found for class User with id(s) 546641393834330002000000.\nSummary:\n When calling User.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): 546641393834330002000000 ... (1 total) and the following ids were not found: 546641393834330002000000.\nResolution:\n Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause a nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.","error_class":"ActiveJob::DeserializationError","failed_at":1424175773.317896,"retry_count":0}

Однако объект в базе данных.

Я попытался добавить after_create callback (Mongoid), но не имеет никакого значения.

Любая идея о том, что происходит?

Спасибо.

ответ

11

Sidekiq работает так быстро, что выполняет свою работу до того, как база данных совершит транзакцию. Используйте команду after_commit, чтобы создать вакансию.

+0

@mike_perham Пожалуйста, прочтите мой вопрос. Я уже пробовал это (используя Mongoid): http://mongoid.org/en/mongoid/docs/callbacks.html – borjagvo

+0

Прочтите мой комментарий. :-) after_commit не after_create. –

+0

Я знаю, но Mongoid не имеет этого обратного вызова (after_commit). – borjagvo

0

Хорошо, я виноват. Чтобы заставить Sidekiq работать (он не делает это автоматически), вам нужно запустить нового Heroku Worker Dyno.

Смежные вопросы