2012-03-06 24 views
11

Sto cercando di consentire caricamenti di grandi dimensioni quando eseguo Unicorn su Heroku con Rails ma ho capito che qualsiasi caricamento di grandi dimensioni potrebbe richiedere più tempo del periodo di timeout per un lavoratore Unicorn. Ciò significa (ho visto accadere questo) che il processo master Unicorn uccide il lavoratore che carica il file di grandi dimensioni e la richiesta scadrà (con un errore 503).Unicorn + Rails + Caricamenti di grandi dimensioni

Senza rimuovere o aumentare in modo massivo il timeout per il mio server, c'è un modo per consentire al lavoratore che si sta caricando di bloccarsi mentre l'upload è completato? Oppure, sto completamente fraintendendo e probabilmente è qualcos'altro che sta causando il timeout dei miei caricamenti?

risposta

7

Se stai caricando su S3, puoi semplicemente "fare in modo che l'utente carichi i file direttamente su S3 anziché tramite i tuoi dynos e ricevi un ping quando il caricamento è completo.

Per significativamente più informazioni di questo, controlla qualcosa come CarrierWaveDirect

+0

Sto utilizzando CarrierWaveDirect, ma dovevo ancora aumentare il timeout dei lavoratori dell'unicorno, perché si bloccano se il caricamento del file richiede troppo tempo, anche se si utilizza CarrierWaveDirect. – cantonic

8

Se stai usando nginx come reverse proxy di fronte ai tuoi unicorni, è possibile utilizzare il Upload Module. Quando configurato, nginx gestisce il caricamento e lo memorizza in una directory/tmp, quindi il tuo unicorno ottiene i parametri di richiesta indicando dove si trova la risorsa caricata e il suo tipo di contenuto. Non è più occupato il lavoratore che riceve il caricamento.

Se non si desidera realmente caricare sullo stesso server del proprio servizio Web, ma piuttosto memorizzarlo in S3, è necessario seguire il suggerimento di @Neil Middleton e impostare le impostazioni in modo che il caricamento venga eseguito direttamente lì.

Problemi correlati