2011-10-21 40 views
11

Tengo un problema con mi aplicación basada en RefineryCMS 1.0.8 desplegada en heroku.Tiempo de espera de Heroku al cargar un archivo grande a s3

Heroku tiene un tiempo de espera de solicitud de 30 segundos. Al cargar un archivo> 4MO a través del administrador de RefineryCMS, a veces tomará más de 30 segundos para realizar la solicitud (principalmente debido al tiempo necesario para cargar el archivo a s3).

En este caso, el dinamómetro se "congelará" y no responde durante alrededor de 30 minutos (cada solicitud durante este tiempo termina en con un tiempo de espera de solicitud de error H12). Este comportamiento es exactamente lo que describe Christos en el último mensaje de this discussion

De esta other discussion y the heroku documentation : "Subir directo a S3 es el método preferido si estás trabajar con la carga de archivos más grandes que 4 MB La idea es. para omitir el salto a su dinamómetro, realizando una conexión desde el navegador del usuario final directamente a S3. "

La carga directa a S3 debería ser la solución, pero parece difícil para implementarla correctamente con RefineryCMS/Dragonfly/Fog. No estoy seguro si es posible sin una gran modificación en estas herramientas y me pregunto si hay una alternativa.

Gracias por su ayuda

Respuesta

4

Realmente no. El tiempo de espera de Heroku es una cosa de piedra en la que tienes que trabajar. La carga directa a S3 es la única opción, con algún tipo de procesamiento posterior a la carga requerido.

Existen soluciones como CarrierWaveDirect, pero no sé cuán fácil sería usarlo con Refinery.

+0

en realidad no es inamovible. Si usas una solución que ya tienes (por ej., Eventlet), puedes configurar el tiempo de espera más alto (acabo de establecer el mío en 60 segundos y pasé 48 segundos cargando una foto correctamente en mi aplicación), y a Heroku no le importará, porque no es bloqueando –

-4

Puede intentar agregar Unicornio a su aplicación.

config/unicorn.rb

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

tiempo de espera de 180 # < < Unicorn Timeout permitirá un tiempo más largo de subida.

preload_app cierto

before_fork hacer | servidor, trabajador |

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

+0

¿Esto anula el tiempo de espera heroku? – superluminary

+0

Al usar rieles, esto permitió un tiempo de espera de 180 segundos que permitió que terminara mi carga de s3. Creo que Heroku establece de manera predeterminada el tiempo de espera establecido en el unicornio. – BIT

+2

El enrutador de Heroku no establece de manera predeterminada lo que esté configurado en la configuración del unicornio de la aplicación. –

Cuestiones relacionadas