Rails Paperclip no puede guardar archivos adjuntos con caracteres acentuados en el nombre del archivo

Usando Windows, con Rails v3.2.11, Ruby v1.9.3p0, la última versión estable de Paperclip AFAIK.

Nombre de archivo: "2011-rosado-750mL.png"

Estoy tratando de actualizar mi sitio web y, en el proceso, necesito mover todas las imágenes almacenadas en el clip (originales) a una ubicación diferente. Entonces, esencialmente estoy leyendo cada archivo original y configurando el archivo adjunto, luego ejecuto guardar en el modelo. Claramente, paperclip no tiene problemas para guardar un archivo cargado con los caracteres acentuados, pero al guardar un nuevo archivo haciendo referencia al nombre con caracteres acentuados, algo malo sucede.

ejemplo:

w = Wine.find(19)
w.photo = File.open("D:/Files/Websites/rails3.website/public/images/store/products/original/2011-rosé-750mL.png", 'rb')
w.save :validate => false

La mayor parte del proceso de actualización funciona hasta que llego a un archivo con el nombre mencionado anteriormente. El error que recibo es: No existe tal archivo o directorio - .../2011-rosé-750mL

enter image description here

Todo lo que puedo pensar es que tiene que ver con la codificación de caracteres del archivo en el nombre, de modo que cuando Paperclip intenta leer el archivo al guardarlo, no usa los caracteres correctos. File.open(source, 'rb') realmente funciona (no arroja ningún error), es solo cuando se guarda el modelo que aparece este error. Mirando el mensaje de error, hace referencia al directorio de guardado para los originales, no al directorio desde el que estoy leyendo cuando ejecuto File.open(); por lo que está en algún lugar de la línea, pero aparentemente fuera de mi control (partes internas de Paperclip).

preguntado el 29 de septiembre de 13 a las 22:09

2 Respuestas

Es un problema de codificación de caracteres. He usado esta joya:

https://github.com/saepia/paperclip-strip-strange-characters

Lo cual fue muy efectivo, sin embargo, no estoy seguro de los resultados que obtendrás con esas versiones de Ruby y Rails. Vale la pena intentarlo.

Respondido el 29 de Septiembre de 13 a las 23:09

Basado en la respuesta de trh, decidí cambiar el nombre de todos los archivos mediante el uso de la función ActiveSupport::Inflector.transliterate. Además, los archivos Paperclip ahora se transliteran de forma predeterminada (ya no se usan caracteres acentuados en los nombres de los archivos).

Respondido el 30 de Septiembre de 13 a las 00:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.