2011-07-19 4 views
4

Je suis en train de renommer un grand nombre de fichiers dans s3 - changer le courant has_attached_file:path paperclip stuff/:id_:updated_at_:style.:extension-stuff/:id_:counter_:style.:extension, où :counter est un champ dans le même modèle que l'image.Rails Paperclip S3 renommer des milliers de fichiers?

Je n'ai pas la moindre idée sur la façon de renommer tous les fichiers - de préférence dans une tâche de rake. Par ailleurs, je vais incrémenter :counter chaque fois qu'un nouveau fichier est enregistré dans l'enregistrement.

Ceci est Rails 3 et le dernier Paperclip à ce jour.

Des idées?

Merci!

+0

Je travaille sur une solution utilisant la gemme aws-s3 pour éditer le seau S3 directement. Je posterai une réponse ci-dessous une fois que j'ai vérifié que cela fonctionne ... mais je pense que ça va. :) – wulftone

Répondre

5

Voici ma solution:

# This task changes all of the keys from the current format, 
# :id_:image_updated_at_:style, to :id_:image_counter_:style. 
# :image_counter is set arbitrarily at 1, since all records have 
# a default of 1 in that field (until they're updated). 
desc "One-time renaming of all the amazon s3 content for User.image" 

task :rename_s3_files, [:bucket] => :environment do |t, args| 
    require 'aws/s3' 

    cred = YAML.load(File.open("#{Rails.root}/config/s3.yml")).symbolize_keys! 
    AWS::S3::Base.establish_connection! cred 

    bucket = AWS::S3::Bucket.find(args[:bucket]) 

    # Rename everything in the bucket, taking out the timestamp and replacing it with "1" 
    bucket.each do |obj| 
    arr = obj.key.split('_') 
    obj.rename(arr[0] + '_1_' + arr[2]) 
    end 

end 

Il va juste à travers tous les fichiers dans le seau et les renomme selon ce nouveau schéma. J'ai mis le champ: counter dans le chemin Paperclip à 1 par défaut, ainsi le _1_ dans le nouveau nom de fichier.

Fonctionne comme un charme!

1

Essayez la tâche de rake de paperclip. Je l'ai utilisé pour générer de nouveaux styles et je suppose qu'il va également prendre en compte votre changement de trajectoire?

https://github.com/thoughtbot/paperclip/wiki/Thumbnail-Generation

+0

Je ne suis pas sûr que cela va fonctionner - je dois renommer les originaux, pas les vignettes. Si je change l'option: path au format que je veux, il ne verra plus les fichiers, donc il ne pourra pas les renommer avec un retraitement. – wulftone

Questions connexes