miércoles, 22 de diciembre de 2010

Upload de ficheros con CKEditor

Hace unos días, en un proyecto en el que estamos usando CKEditor para que los administradores puedan gestionar el contenido de la web, me pidieron añadir upload de imágenes.

La opción más simple que encontré fue utilizar el plugin rails-ckeditor, que integra la funcionalidad de subida de imágenes de una forma bastante elegante usando SWFUpload.

Como siempre, en local funcionaba todo perfectamente, pero al instalar en la máquina de integración dio un poco de guerra.

Para empezar, el primer problema fue con la versión de RMagick, instalando la última versión disponible (2.13.1) me daba un bonito error

Updating installed gems
Updating rmagick
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
ERROR: Failed to build gem native extension.
...
checking for ImageMagick version >= 6.4.9... no
Can't install RMagick 2.13.1. You must have ImageMagick 6.4.9 or later.


El problema es que la máquina de integración tiene Ubuntu Hardy, y la versión de ImageMagick de Hardy es la 6.3.7:

$ convert -version
Version: ImageMagick 6.3.7 06/04/09 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC

Así que mirando en github las dependencias de la Rmagick en el fichero extconf.rb se encuentra que la última versión que se puede usar es la 2.12.2, actualizamos bundler y instalación superada.

El siguiente problema aparece al probar la subida de imágenes y ver que da simplemente un alert de javascript, a veces con un 401 y otras con un 2038 sin ninguna más información.

Mirando en el log de apache se encuentra el error

84.79.196.203 - - [11/Nov/2010:11:16:03 +0100] "POST /es/ckeditor/create/image?.... HTTP/1.1" 401 350 "-" "Shockwave Flash"

El problema es debido al Flash de subida de imágenes, que no es capaz de gestionar la autentificación básica del servidor de integración y da un Unathorized.

La solución, permitir el acceso a esa carpeta del servidor de integración en Apache añadiendo en el virtual host


<Location /*/ckeditor/create/image*>
Satisfy Any
Allow from all
</Location>


El * porque utilizamos el plugin routing filter para gestionar el multilenguaje.


 Y con estos dos pequeños cambios, prueba superada. Aquí lo dejo por si a alguien le sirve de ayuda....