2012-10-09 10 views
6

Mam kontroler Rails na Heroku, gdzie wysyłam wiadomości e-mail w pętli i udzielam użytkownikowi odpowiedzi na temat adresu e-mail, do którego wysłano e-maile.Zapobiegaj przekroczeniu limitu czasu żądania z długimi żądaniami

Chociaż działa to tylko w przypadku wysłania tylko kilku (~ 40) wiadomości e-mail, żądanie wygasa, gdy jest ich więcej niż kilka e-maili do wysłania (np.> 40).

Heroku członkowskie w ich przewodnikami, że wnioski muszą odpowiedzieć przynajmniej jeden bajt w ciągu 30 sekund: https://devcenter.heroku.com/articles/request-timeout

Choć wiem, że to nie jest najlepszy sposób, aby osiągnąć ten cel, jestem obecnie próbuje dowiedzieć się, jak zrób to w Ruby.

Gdyby to była aplikacja PHP, mógłbym zrobić echo przed wejściem do pętli, a następnie zachować echo coś w każdej iteracji. Jak osiągnąć coś podobnego w szynach?

Odpowiedz

4

Najlepiej jest nie wysyłać wiadomości przed wysłaniem odpowiedzi. Będziesz miał więcej szczęścia, najpierw dodając pracę do jednej z wielu dostępnych kolejek roboczych Heroku, a następnie kopiąc na stronę monitorowania, która wyświetla postęp prac i okresowo aktualizuje się. Jeśli próbujesz uniknąć korzystania z jednej z tych usług kolejki, ze względów budżetowych, możesz być w stanie wykonać to samo, używając nowego wątku, zamiast kolejki. Tak czy inaczej, technika ta będzie się lepiej skalować, jak również będzie w stanie łatwiej odzyskać od awarii.

Wygląda na to, że już wiesz, że proponowane przez ciebie rozwiązanie nie jest idealnym rozwiązaniem. Postaram się również odpowiedzieć na Twoje dokładne pytanie. Możliwe, że możesz w tym celu korzystać ze strumieniowania HTTP. Polecam sprawdzenie http://railscasts.com/episodes/266-http-streaming.

+0

Dzięki. Naprawdę starałem się unikać płacenia za robotnicze dynastie Heroku. – rdasxy

+0

Tak, wszystkie dodatki szybko się sumują. –

+1

Możesz sprawdzić https://github.com/lostboy/workless, aby uzyskać pracowników na budżet. –

Powiązane problemy