tutorial thoughtbot rails active ruby-on-rails import paperclip

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