ruby on rails - notidentifiedbyimagemagickerror - Evitar que Paperclip borre/sobrescriba archivos adjuntos en la actualizaciĆ³n
paperclip::errors::missingrequiredvalidatorerror (4)
Debido a que los archivos adjuntos se definen a nivel de clase, Paperclip interpola los símbolos en sus cadenas utilizando su propia biblioteca de interpolación. Puedes crear tus propias interpolaciones usando esta biblioteca.
Yo agregaría un campo al modelo llamado attachment_version
o algo similar, y luego incrementaré este número de versión cada vez que se cambie el archivo. Luego, cree una interpolación para él en un archivo de inicialización:
Paperclip.interpolates :version do |attachment, style|
attachment.instance.attachment_version
end
Ahora puedes usar :version
en tus cadenas:
class Model < ActiveRecord::Base
has_attached_file :something, :path => " :rails_root/public/somethings/etc/:version.:extension"
end
Consulte la documentación de la wiki para más información.
[Actualizar]
Después de investigar un poco (vea los comentarios de esta respuesta), llegué a la conclusión de que Paperclip aún eliminará el archivo adjunto anterior debido al código al que se llama en Paperclip::Atachment#attach
. Probablemente la mejor manera de lidiar con esto es crear un nuevo motor de almacenamiento basado en Paperclip::Storage::Filesystem
y sobrescribir #flush_deletes
. Tenga en cuenta que no hay forma en ese método de saber si un archivo se está poniendo en cola para ser eliminado debido al modelo al que pertenece o si se está cargando un nuevo archivo en su lugar.
Me resulta difícil descubrir cómo evitar que Paperclip elimine la versión anterior de un archivo adjunto (imagen).
Tengo un modelo, sitio, que tiene un archivo adjunto, logotipo. Me gustaría mantener los logos antiguos ya que estaré al tanto de los cambios en el modelo y me gustaría ver el historial de logos.
Estoy realizando un seguimiento de los cambios en otro modelo, que tiene una referencia a las rutas de archivos. Mi problema es que cuando se actualiza un sitio con un nuevo logotipo, Paperclip enjuaga primero el antiguo logotipo.
Me sorprende que no haya una opción que pueda cambiar para evitar que Paperclip vacíe el archivo adjunto anterior antes de crear el nuevo.
¿Algunas ideas?
Hay una nueva opción que le dice al clip de papel que preserve los archivos adjuntos viejos:
https://github.com/thoughtbot/paperclip/commit/65e8d4f6de50732d8e1b https://github.com/thoughtbot/paperclip/issues/60
Fácil de usar:
has_attached_file => :attachment,
:styles => { :thumb => 100x100! },
:preserve_files => true
Todavía no está documentado y me costó buscarlo, así que quería compartirlo aquí.
Tuve un problema similar con los archivos adjuntos de Paperclip cuando trabajé en un blog de Rails el verano pasado.
Hay un parche que aborda esto. No pude hacerlo funcionar por mi cuenta, pero vale la pena intentarlo.
lib / paperclip_monkey_patch.rb:
module Paperclip
class Attachment
def clear
# nop
#raise "hell"
# op
instance_write(:file_name, nil)
instance_write(:content_type, nil)
instance_write(:file_size, nil)
instance_write(:updated_at, nil)
end
end
end
Luego, agregue esta línea en la parte superior de cualquier archivo que haya eliminado los archivos adjuntos:
requiere ''paperclip_monkey_patch''
Gracias a Ruby Forum