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!
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
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.