Question

Assis ici avec une application simple Rails 3 dans laquelle j'ai un modèle de galerie simple et chaque galerie a de nombreuses images. Le modèle d'image est étendu avec le trombone et avec les options suivantes

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

Dans mon galeries_contreller, j'ai l'action suivante qui est mise en œuvre afin de travailler avec le jQuery-fichier-téléchargement brancher. ainsi la réponse 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

Pour moi, c'est assez simple. Mais voici le problème. En développement sous Mongrel, tout type de téléchargement fonctionne très bien avec environ 500 à 1 000 ms / téléchargement.

Cependant, lorsque je le pousse en production, j'obtiens constamment des délais d'attente de mes travailleurs de la licorne et lorsqu'il envoie une image à travers, il prend de 30 à 55 secondes pour un fichier.

Les fichiers que je télécharge mesurent environ 100 000

J'ai fait quelques tests de la bande passante entre mon VPS et mon ordinateur de développement avec IPREF et j'ai obtenu une vitesse moyenne d'environ 77 kbps, donc le téléchargement ne devrait pas être un problème.

Remarque J'ai également fait un test avec un téléchargement de fichiers non AJAX en utilisant la même application avec un modèle utilisateur qui a un avatar. Développement => terminé 302 trouvé dans 693 ms production => terminé 302 trouvé dans 21618 ms

Quelqu'un a-t-il rencontré un problème similaire avec les téléchargements de fichiers (Rails3, Unicorn)?

Était-ce utile?

La solution

Donc, après avoir creusé, j'ai réussi à déterminer que sur mon VPS, c'était l'option OpenMP dans ImageMagick qui provoquait le fonctionnement très lent. Donc, ma première tentative a été de reconstruire le package Ubuntu 10.04 natif avec le drapeau - dissable-openMP ajouté. Cela a échoué pour une raison quelconque et bien que je ne sache pas pourquoi le package continuait à sortir avec OpenMP toujours actif. Ma solution actuelle est maintenant à la place de Backport ImageMagick d'Ubuntu 10.10. Ci-dessous suit les étapes que j'ai prises:

Étape 1 Téléchargez les fichiers suivants:

  • 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 ici

Étape 2 déballer le package

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

Étape 3 Modifier les règles

$ cd imagemagick-6.6.2.6
$ vim debian/rules

Ajoutez la ligne Follwing à la déclaration ./configure sur la ligne 25-39. J'ai ajouté le mien à la ligne 34.

34: --disable-openmp \

Étape 4 ajouter des dépendances et construire (j'avais besoin de ces dépendances)

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

Étape 5 Avec l'ancien, avec le nouveau

$ 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

Étape 6 Encore une fois, ont des conversions d'images rapides

_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

Autres conseils

Si le traitement prend beaucoup de temps, envisagez de traiter les vignettes chez des travailleurs séparés.

Demande: accepter le fichier; Enregistrez-le sur disque; Publier un emploi à la file d'attente: POP Job à partir de la file d'attente; créer des miniatures; répéter

Retardé :: Job et Resque sont d'excellentes solutions pour cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top