Resque i przesuniecie czasu wykonania zadania

Uzytkownik może wgrywać obrazki za pomocą Paperclipa, po zapisaniu rekordu, w observerze tworzone jest zadanie dla Resque, które polega na tym że ten sam obrazek jest wrzucany na inny server. O ile dla obrazków które są zapisywane Paperclipem lokalnie to działa, to obawiam się że może być problem na produkcji, bo tam przypisane obrazki są trzymane na s3 i może zajść sytuacja że zadanie Resque będzie chciało przekazać dalej obrazek, którego jeszcze nie ma na s3 bo dopiero się wrzuca. Jakieś porady ?

Nie powinno się tak dziać, gdyż najpierw jest upload obrazka a potem wywoływane są callbacki przy zapisie. Włącz logowanie na poziomie info to upewnisz się w logach, że tak właśnie jest.

+1 do postu radarka. Jeśli napisałeś obserwer, który jest wyzwalany after_create, to nie powinno być problemu, o którym piszesz.

sprawdziłem w logu i niestety
najpierw jest INSERT INTO …
(tutaj after_create o ile jakies zdefiniujemy)
potem observer
i dopiero [paperclip] Saving attachments.

A może skorzystaj z :after_commit zamiast :after_create?

http://alindeman.github.com/2011/10/02/after-save-and-background-jobs.html

dzięki! :slight_smile:
wprawdzie mało eleganckie, bo teraz dla test i dev zadanie dla resque będzie kolejkowane w after_commit a dla produkcji w observerze, ale najważniejsze że działa :slight_smile:

update, niestety dla test w ogóle ten hook nie odpala.
moze paperclip ma jakiś hook który odpala po zapisaniu pliku ? znalazłem tylko before/after post_process ale to jest wywoływane za wcześnie, moze ma ktoś linka do doca gdzie by były callbacki paperclipa ? bo coś nie mogę się dokopać

Znalazłem rozwiązanie, otóż after_create jest wywoływany przed zapisem załącznika, natomiast after_save po. Nie mam pojecia czy to bug Paperclipa czy taki feature.