2012-10-09 9 views
6

Ich habe einen Rails Controller auf Heroku, wo ich E-Mails in einer Schleife senden, und antworte dem Benutzer mit einigen Informationen darüber, an welche E-Mail-Adresse die E-Mails gesendet wurden.Verhindern Anfrage Timeout mit langen Anfragen

Während dies funktioniert, wenn nur ein paar (~ 40) E-Mails versandt werden müssen, überschreitet die Anforderung das Zeitlimit, wenn mehr als nur ein paar E-Mails gesendet werden (z. B.> 40).

Heroku Zustände in ihren Führungen, die Anforderungen mit mindestens einem Byte innerhalb von 30 Sekunden reagieren muss: https://devcenter.heroku.com/articles/request-timeout

Während ich weiß, dass dies nicht der beste Weg, um dies zu erreichen, ich versuche zur Zeit, um herauszufinden, wie man Mach das in Ruby.

Wenn dies eine PHP-App wäre, könnte ich eine echo vor dem Einstieg in die Schleife tun, und dann echo etwas in jeder Iteration halten. Wie erreiche ich etwas ähnliches in Schienen?

Antwort

4

Ihre beste Wette ist, das Mailing nicht vor dem Senden der Antwort zurück zu tun. Sie werden mehr Glück haben, wenn Sie den Job zuerst einer der vielen verfügbaren Worker-Warteschlangen von Heroku hinzufügen und dann auf eine Überwachungsseite wechseln, die den Jobfortschritt anzeigt und sich regelmäßig aktualisiert. Wenn Sie versuchen, die Verwendung einer dieser Warteschlangendienste zu vermeiden, können Sie aus Budgetgründen dasselbe mithilfe eines neuen Threads anstelle einer Warteschlange erreichen. In jedem Fall wird diese Technik besser skalieren und auch Fehler leichter beheben können.

Da Sie anscheinend bereits wissen, dass Ihre vorgeschlagene Lösung nicht die ideale Lösung ist, werde ich auch versuchen, Ihre genaue Frage zu beantworten. Möglicherweise können Sie dafür HTTP-Streaming verwenden. Ich würde empfehlen, http://railscasts.com/episodes/266-http-streaming auschecken.

+0

Danke. Ich wollte tatsächlich vermeiden, für Herokus Arbeiterdyn zu zahlen. – rdasxy

+0

Ja, diese Add-ons summieren sich schnell. –

+1

Sie können https://github.com/lostboy/workless überprüfen, um die Mitarbeiter mit einem Budget zu versorgen. –