ここに私のソリューションです:
# 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
それはちょうどバケツ内のすべてのファイルを通過し、この新しいスキーマに応じてそれらの名前を変更します。 Paperclipパスの:counterフィールドをデフォルトの1に設定して、新しいファイル名に_1_
を設定します。
魅力的な作品です!
私はS3バケットを直接編集するためにaws-s3 gemを使用して解決策を進めています。私はそれが動作することを確認した後、私は以下の回答を投稿します....しかし、私はそれができると思います。 :) – wulftone