2013-09-26 6 views
6

Ich verwende ein Einhorn auf Heroku. Eines der Probleme, die ich habe, ist das Hochladen von Dateien. Wir verwenden carrierwave für Uploads, und im Grunde, selbst für eine Datei mit einer Größe von etwa 2 MB, wird Unicorn nach Ablauf der Zeit von 50-60% hochgeladen.Timeout-Fehler vom Einhorn beim Hochladen einer Datei

Wir verwenden kein Unicorn, wenn wir lokal testen, und ich habe keine Probleme mit großen Dateien lokal (obwohl die Dateien mit Carrierwave wie bei Produktion + Staging auf AWS hochgeladen werden). Bei der Bereitstellung von & Produktionsservern sehe ich jedoch, dass wir eine Zeitüberschreitung erhalten.

Irgendwelche Strategien zur Behebung dieses Problems? Ich bin mir nicht sicher, ob ich diesen Datei-Upload auf einen verzögerten Job stellen kann (weil ich meinen Benutzern bestätigen muss, dass die Datei tatsächlich erfolgreich hochgeladen wurde).

Danke! Ringo

+0

Können Sie versuchen, ein Einhorn lokal zu verwenden? –

Antwort

0

Klingt wie Ihre Zeitüberschreitung zu niedrig eingestellt ist. Wie sieht deine Unicorn-Konfiguration aus?

Siehe https://devcenter.heroku.com/articles/rails-unicorn für einen guten Startpunkt.

+1

mein Einhorn Timeout war 15, bis 30, aber keinen Unterschied. Ich würde es vorziehen, eine Lösung zu entwickeln, die nicht davon abhängt, die Zeitüberschreitung zu erhöhen. –

2

Wenn Sie große Dateien über Heroku auf S3 hochladen, können Sie Timeouts nicht vermeiden. Wenn sich jemand entschließt, eine große Datei hochzuladen, wird die Zeit überschritten. Wenn es länger als 30 Sekunden dauert, um zu Heroku hochzuladen, zu S3 zu übertragen und zu verarbeiten, wird die Anforderung überschritten. Aus gutem Grund ist eine 30er-Anfrage nur eine schlechte Leistung.

Dieser Blog-Eintrag (und GitHub Repo) ist sehr hilfreich: http://pjambet.github.io/blog/direct-upload-to-s3/

Damit sollten Sie in der Lage sein, arbeiten direct-to-s3 zu bekommen Datei-Uploads. Sie vermeiden es, Heroku für den Großteil des Uploads zu treffen. Mit den Callbacks von jquery-fileupload können Sie die Anwendung nach dem erfolgreichen Hochladen der Datei posten und im Hintergrund mit delayed_job verarbeiten. Den Benutzern zu bestätigen, dass der Upload erfolgreich ist, ist ein Anwendungsproblem, um das Sie sich kümmern müssen.

+0

Siehe auch: http://StackOverflow.com/a/16341162/1546887 – Taavo