Pregunta

Sentado aquí con una aplicación simple Rails 3 en la que tengo un modelo de galería simple y cada galería tiene muchas imágenes. El modelo de imagen se extiende con PaperClip y con las siguientes opciones

has_attached_file :local, 
   :styles => {
     :large => "800x800>", 
     :medium => "300x300>", 
     :thumb => "100x100#", 
     :small => "60x60#"
   }

En mi galeries_controller tengo la siguiente acción que se implementa para trabajar con el jQuery-File-Supload enchufar. De este modo la respuesta JSON.

def add_image
   gallery = Gallery.find params[:id]
   image = gallery.images.new({:local => params[:local]})
   if image.save
     render :json => {:thumb => image.url(:thumb), :original => image.url}
   else  
    render :json => { :result => 'error'}
   end
end

Para mí esto es bastante sencillo. Pero aquí viene el problema. En el desarrollo bajo Mongrel, cualquier tipo de carga funciona bien con aproximadamente 500-1000 ms/carga.

Sin embargo, cuando lo presiono a la producción, constantemente obtengo tiempos de espera de mis trabajadores de unicornio y cuando envía una imagen a través de él lleva entre 30 y 55 segundos para un archivo.

Los archivos que carto tienen alrededor de 100k en tamaño

He realizado algunas pruebas del ancho de banda entre mi VPS y mi computadora de desarrollo con IPREF y obtuve una velocidad promedio de aproximadamente 77kbps, por lo que la carga no debería ser un problema.

Nota También hice una prueba con una carga de archivos no AJAX utilizando la misma aplicación con el modelo de usuario que tiene un avatar. Desarrollo => completado 302 encontrado en 693ms Producción => 302 completado encontrado en 21618ms

¿Alguien experimentó un problema similar con las cargas de archivos (Rails3, Unicorn)?

¿Fue útil?

Solución

Entonces, después de cavar, logré determinar que en mi VPS era la opción OpenMP en ImageMagick lo que estaba causando la operación muy lenta. Así que mi primer intento fue reconstruir el paquete nativo de Ubuntu 10.04 con la bandera--desesable-openmp agregada. Esto falló por alguna razón y aunque no estoy seguro de por qué el paquete seguía saliendo con OpenMP aún activo. Mi solución actual ahora es para respaldar la imagen de ImageMagick de Ubuntu 10.10. A continuación sigue los pasos que tomé:

Paso 1 Descargue los siguientes archivos:

  • ImageMagick_6.6.2.6-1ubuntu1.1.dsc
  • ImageMagick_6.6.2.6.orig.tar.bz2
  • ImageMagick_6.6.2.6-1ubuntu1.1.debian.tar.bz2

de aquí

Paso 2 Desempaquete el paquete

$ dpkg-source -x imagemagick_6.6.2.6-1ubuntu1.1.dsc

Paso 3 editar las reglas

$ cd imagemagick-6.6.2.6
$ vim debian/rules

Agregue la línea de follwing a la estebo ./configure en la línea 25-39. Agregué el mío en la línea 34.

34: --disable-openmp \

Paso 4 Agregar dependencias y construir (necesitaba estas dependencias)

$ sudo apt-get install liblqr-1-0-dev librsvg2-dev
$ dpkg-buildpackage -b

Paso 5 Fuera con el viejo, adentro con el nuevo

$ sudo apt-get remove --purge imagemagick
$ sudo dpkg -i libmagickcore3_6.6.2.6-1ubuntu1.1_amd64.deb
$ sudo dpkg -i libmagickwand3_6.6.2.6-1ubuntu1.1_amd64.deb
$ sudo dpkg -i imagemagick_6.6.2.6-1ubuntu1.1_amd64.deb

Paso 6 Una vez más tienen conversiones de imágenes rápidas

_before_ (with openmp)
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m11.602s
user    0m11.414s
sys  0m0.069s

_after_
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb'
real    0m0.077s
user    0m0.058s
sys  0m0.019s

Otros consejos

Si el procesamiento lleva mucho tiempo, considere procesar las miniaturas en trabajadores separados.

Solicitud: aceptar archivo; Guárdelo en el disco; Publicar trabajo para cola trabajador: trabajo pop de la cola; crear miniaturas; repetir

Retrasado :: trabajo y resque son excelentes soluciones para esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top