2010-09-27 7 views
6

Quiero ejecutar Paperclip en todos los archivos en un directorio en el servidor. Básicamente, me gustaría permitir que los usuarios transfieran algunos archivos a mi servidor web, luego puedo ejecutar manualmente una tarea de rake para que Paperclip procese todos los archivos (cambie el tamaño de las imágenes, actualice la base de datos, etc.).¿Cómo puedo hacer que Paperclip procese archivos desde un directorio de servidor?

¿Cómo puedo hacer esto?

+0

también necesitaba esto para convertir desde un sistema antiguo, donde los archivos son estáticos en el disco a un entorno de Rails. Básicamente solo abra el archivo y asígnelo al modelo de destino atributo 'has_attached_file' y guárdelo. – Chloe

Respuesta

9

No estoy seguro de haber entendido su pregunta. ¿Está pidiendo ejecutar la tarea de rastrear de forma remota o cómo importar imágenes?

En el último caso hay una respuesta.

En primer lugar se necesita algún modelo para mantener las imágenes y tal vez algunos otros datos, algo como esto:

class Picture < ActiveRecord::Base 
    has_attached_file :image, :styles => { 
     :thumb => "100x100>", 
     :big => "500x500>" 
     } 
end 

Puede crear tareas rastrillo simple en su carpeta lib/tareas (que debe nombrar el archivo. extensión rastrillo)

namespace :import do 

    desc "import all images from SOURCE_DIR folder" 
    task :images => :environment do 
    # get all images from given folder 
    Dir.glob(File.join(ENV["SOURCE_DIR"], "*")) do |file_path| 
     # create new model for every picture found and save it to db 
     open(file_path) do |f| 
     pict = Picture.new(:name => File.basename(file_path), 
          :image => f) 
     # a side affect of saving is that paperclip transformation will 
     # happen 
     pict.save! 
     end 


     # Move processed image somewhere else or just remove it. It is 
     # necessary as there is a risk of "double import" 
     #FileUtils.mv(file_path, "....") 
     #FileUtils.rm(file_path) 
    end 
    end 

end 

a continuación, puede llamar manualmente rastrillo tarea desde la consola que proporciona parámetros SOURCE_DIR que será la carpeta en el servidor (que puede ser real o carpeta de montaje remoto)

rake import:images SOURCE_DIR=~/my_images/to/be/imported 

Si planea ejecutar esto automáticamente, le recomiendo que vaya a la gema de Resque Scheduler.

Actualización: Para simplificar he omitido deliberadamente la gestión de excepciones

+0

Eso es increíble, creo que es exactamente lo que necesito. Lo probaré más tarde hoy. – NotDan

+0

¡me alegro de escucharlo! –

+0

¡Súper fácil, gracias! – NotDan

Cuestiones relacionadas