2011-10-21 15 views
11

Ho riscontrato un problema con la mia applicazione basata su RefineryCMS 1.0.8 distribuito su heroku.Timeout di Heroku durante il caricamento di file di grandi dimensioni su s3

Heroku ha un timeout di richiesta di 30 secondi. Durante il caricamento di un file> 4MO attraverso l'amministratore RefineryCMS, a volte occorrono più di30 secondi per eseguire la richiesta (principalmente a causa del tempo necessario per caricare il file su s3).

In questo caso, il banco sarà "congelato" e non risponde per circa 30 minuti (ogni richiesta in questo momento termina con fino a un timeout di richiesta errore H12). Questo comportamento è esattamente quello che descrivono Christos l'ultimo messaggio in this discussion

Da questo other discussion e the heroku documentation : "Carica diretto al S3 è l'approccio preferito se siete lavorare con upload di file più grandi di 4 MB L'idea è. per saltare il salto al tuo banco di prova, effettuando una connessione dal browser dell'utente finale direttamente da a S3. "

Il caricamento diretto su S3 dovrebbe essere la soluzione ma sembra difficile per implementarlo correttamente con RefineryCMS/Dragonfly/Fog. Non sono sicuro che sia possibile senza grandi modifiche in questi strumenti e mi chiedo se esiste un'alternativa.

Grazie per il vostro aiuto

risposta

4

Non proprio. Il timeout di Heroku è un insieme di cose di pietra che devi risolvere. Il caricamento diretto su S3 è l'unica opzione, con una sorta di elaborazione post-caricamento richiesta.

Ci sono soluzioni là fuori come CarrierWaveDirect, ma non so quanto sarebbe facile da usare con la raffineria.

+0

Non è impostato su pietra. Se si utilizza una soluzione evented (ad esempio, Eventlet), è possibile impostare il timeout più alto (ho appena impostato il mio a 60 secondi e trascorso 48 secondi con successo caricando una foto nella mia applicazione), e Heroku non si preoccuperà, perché è non- il blocco. –

-4

Si potrebbe provare ad aggiungere unicorno alla propria applicazione.

config/unicorn.rb

worker_processes Integer (ENV [ "WEB_CONCURRENCY"] || 3)

timeout 180 # < < Unicorn Timeout consentirà un tempo più lungo di upload.

preload_app vero

before_fork fare | Server, operaio |

https://devcenter.heroku.com/articles/rails-unicorn

+0

Sostituisce il timeout di heroku? – superluminary

+0

Quando si usavano i binari, questo consentiva un tempo di attesa di 180 secondi che permetteva di terminare il mio caricamento di s3 - Penso che Heroku passi per impostazione predefinita a un timeout impostato su unicorno. – BIT

+2

Il router Heroku non è impostato come predefinito nella configurazione di unicorno dell'app. –