2010-09-27 1 views
6

Voglio eseguire Paperclip su tutti i file in una directory sul server. Fondamentalmente, vorrei consentire agli utenti di trasferire alcuni file sul mio server web FTP, quindi posso eseguire manualmente un'attività rake per fare in modo che Paperclip elabori tutti i file (ridimensiona le immagini, aggiorna il database, ecc.).Come posso creare file di processo Paperclip da una directory del server?

Come posso fare questo?

+0

anch'io bisogno di questo per convertire da un vecchio sistema in cui i file sono statici su disco in un ambiente Rails. Fondamentalmente basta aprire il file e assegnarlo all'attributo 'has_attached_file' del modello di destinazione e salvare. – Chloe

risposta

9

Non sono sicuro di aver capito la tua domanda - stai chiedendo di eseguire il compito di rake da remoto o come importare le immagini?

Nel caso successivo c'è una risposta.

In primo luogo avete bisogno di qualche modello per mantenere le immagini e forse alcuni altri dati, qualcosa di simile:

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

È possibile creare semplici task rake nella cartella lib/task (si dovrebbe assegnare un nome al file con. estensione rake)

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 

Poi si può chiamare manualmente rastrello compito dalla console fornendo parametri dir_sorgente che sarà la cartella sul server (che può essere la cartella reale o montato a distanza)

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

Se si prevede di eseguire automaticamente questo suggerirei di andare per gemma Resque Scheduler.

Update: Per mantenere le cose semplici ho volutamente omesso gestione delle eccezioni

+0

È fantastico, penso che sia esattamente ciò di cui ho bisogno. Lo proverò più tardi oggi. – NotDan

+0

felice di sentirlo! –

+0

Super facile, grazie! – NotDan