Téléchargez avec le papier très lent (licorne)
-
28-10-2019 - |
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)?
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.