ruby on rails - thoughtbot - Importación de datos antiguos con Rails y Paperclip
thoughtbot github (2)
Estoy usando paperclip para archivos adjuntos en mi aplicación. Estoy escribiendo un script de importación para un montón de datos antiguos, pero no sé cómo crear objetos paperclip a partir de archivos en el disco. Mi primera suposición es crear objetos CGP multiparte falsos, pero parece una solución un tanto cruda, y mi intento inicial falló, creo que porque no obtuve el método to_tempfile correcto.
¿Hay una forma correcta de hacer esto? Parece algo que debería ser bastante fácil.
Sé que hice lo mismo y creo que acabo de crear un objeto File desde la ruta a cada archivo, y se lo asigné al atributo de la imagen. Paperclip se ejecutará en ese archivo:
thing.image = File.new("/path/to/file.png")
thing.save
Esto funciona muy bien para los archivos locales, pero no funciona tan bien para los archivos remotos. Tengo una aplicación que usa un clip para cargar imágenes. Esas imágenes se están almacenando en Amazon s3. De todos modos, tenía algunos datos antiguos que necesitaba importar, así que probé lo siguiente:
thing.image = open(''http://www.someurl.com/path/to/image.jpg'')
thing.save
Si el archivo es pequeño (digamos, menos de 10K), entonces openuri devuelve un objeto de cadena y mi archivo se almacenará en s3 como stringio.txt
Si el archivo es más grande que alrededor de 10K, entonces openuri devuelve un objeto TempFile. Pero el nombre de archivo en s3 termina siendo único, pero en realidad no se relaciona con el nombre de archivo original de image.jpg
Pude solucionar el problema haciendo lo siguiente:
remote_photo = open(''http://www.someurl.com/path/to/image.jpg'')
def remote_photo.original_filename;base_uri.path.split(''/'').last; end
thing.image = remote_photo
thing.save