2013-09-26 13 views
6

Używam jednorożca na Heroku. Jednym z problemów, które mam, jest przesyłanie plików. Korzystamy z usługi carrierwave do przesyłania plików, i zasadniczo nawet w przypadku pliku o rozmiarze około 2 MB, do czasu, gdy zostanie przesłane 50-60%, Unicorn wygaśnie.Błąd limitu czasu z jednorożca podczas przesyłania pliku

Nie używamy jednorożca, gdy testujemy lokalnie i nie mam żadnych problemów z dużymi plikami lokalnie (chociaż pliki są przesyłane do AWS przy użyciu operatora carrierwave, tak samo jak w przypadku produkcji + inscenizacji). Jednak na wystawianie serwerów produkcyjnych &, widzę, że mamy limit czasu.

Wszelkie strategie dotyczące rozwiązania tego problemu? Nie jestem pewien, czy mogę przesłać ten plik z opóźnionym zadaniem (ponieważ muszę potwierdzić moim użytkownikom, że plik rzeczywiście został pomyślnie przesłany).

Dzięki! Ringo

+0

Czy możesz spróbować używać lokalnie jednorożca? –

Odpowiedz

0

Wygląda na to, że ustawiony limit czasu jest zbyt niski. Jak wygląda konfiguracja jednorożca?

Zapoznaj się z https://devcenter.heroku.com/articles/rails-unicorn, aby uzyskać dobry punkt początkowy.

+1

Limit czasu jednorożca wynosił 15, zwiększono do 30, ale bez różnicy. Wolałbym opracować rozwiązanie, które nie zależy od zwiększenia limitu czasu. –

2

Jeśli przesyłasz duże pliki do S3 przez Heroku, nie możesz rozsądnie uniknąć przekroczenia limitu czasu. Jeśli ktoś zdecyduje się przesłać duży plik, upłynie limit czasu. Jeśli przesłanie do Heroku trwa dłużej niż 30 sekund, przesłanie do S3 i przetworzenie, żądanie zostanie przerwane. Nie bez powodu, prośba 30-latka to po prostu bzdura.

Ten blog post (i github repo) jest bardzo pomocne: http://pjambet.github.io/blog/direct-upload-to-s3/

Dzięki niemu, powinieneś być w stanie uzyskać bezpośredni wobec s3 przesyłanie plików roboczych. Całkowicie unikasz trafiania na Heroku w większości przypadków. Korzystając z wywołań zwrotnych jquery-fileupload, możesz wysłać do Ciebie aplikację po pomyślnym przesłaniu pliku i przetworzyć ją w tle za pomocą funkcji delayed_job. Potwierdzanie użytkownikom, że przesyłanie zakończyło się powodzeniem, to problem z aplikacją, którą należy się zająć.

+0

Zobacz też: http://stackoverflow.com/a/16341162/1546887 – Taavo

Powiązane problemy