Rails 3 + Paperclip sous Windows

Pour insérer et manipuler des images dans Rails, il existe de nombreux gems permettant de s’affranchir d’une bonne partie de la complexité des transferts de fichiers. Parmi ceux-ci, j’ai retenu Paperclip.

Autant la gestion des transferts de fichiers s’est faite sans problème, autant le redimensionnement de ceux-ci m’a amené à m’arracher quelques cheveux ; je tombais systématiquement sur l’erreur suivante :

Photo C:/xxx/xxx/xxx/Temp/stream,2568,0.jpg is not recognized by the 'identify' command

Pour régler ce problème, trois étapes importantes :

1. Installer ImageMagick
Eh oui, Paperclip repose sur ImageMagick pour le redimensionnement des images ! Il faut donc télécharger cet outil pour Windows à l’adresse suivante :

http://www.imagemagick.org/download/binaries/ImageMagick-6.6.4-9-Q16-windows-dll.exe

Installez le programme à l’adresse par défaut, puis vérifiez que tout fonctionne bien en ouvrant un terminal (invite de commande) et en tapant : identify chemin/vers/une/image.jpg. Si tout est OK, ImageMagick vous répondra en affichant le format du fichier que vous lui avez fourni.

2.  Ajouter un initialiseur à Rails

Ajoutez dans le répertoire config/initializers de votre application un fichier paperclip.rb dans lequel vous collerez le code suivant :

require "paperclip"
Paperclip.options[:command_path] = 'C:\PROGRA~1\ImageMagick-6.6.4-Q16'
Paperclip.options[:swallow_stderr] = false

Bien sûr, la première ligne d’option est à modifier en fonction de la localisation et de la version de ImageMagick installée à l’étape précédente. Il est très important de mettre le chemin Windows au format DOS 8.3 (PROGRA~1 en lieu et place de Program Files, dont l’espace cause problème à Paperclip).

3. Modifier les sources de Paperclip

Il faut également aller modifier la ligne de commande d’ImageMagick dans Paperclip, en éditant le fichier suivant paperclib.rb qui se trouve dans le répertoire lib du gem Paperclip. Sur mon poste, le fichier se trouve ici :

C:\Ruby\lib\ruby\gems\1.9.1\gems\paperclip-2.3.3\lib

Dans la fonction run, qui se trouve vers la ligne 100, trouvez la ligne suivante :

command = %Q[#{path_for_command(cmd)} #{params}]

et remplacez-la par la ligne ci-dessous :

command = %Q[#{path_for_command(cmd)} #{params.gsub("'",'"')}]

Cela remplacera les quotes simples par des quotes doubles.

Voilà, normalement, vous devriez accéder aux joies de Paperclip sous Windows !

Sources : Un commentaire du Railscast dédié à Paperpclip