Rails Paperclip S3 переименовывает тысячи файлов? - PullRequest
4 голосов
/ 19 июля 2011

Я пытаюсь переименовать множество файлов в s3 - меняю текущую скрепку has_attached_file :path с stuff/:id_:updated_at_:style.:extension на stuff/:id_:counter_:style.:extension, где :counter - это поле в той же модели, что и изображение.

Я не знаю, как переименовать все файлы - желательно в граблях.

Кстати, я буду увеличивать :counter каждый раз, когда создается новый файл.сохранено в записи.

Это Rails 3 и последний Скрепка на момент публикации.

Есть идеи?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 21 июля 2011

Вот мое решение:

# 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

Он просто просматривает все файлы в корзине и переименовывает их в соответствии с этой новой схемой. Я установил для поля: counter в пути Paperclip значение по умолчанию 1, то есть _1_ в новом имени файла.

Работает как шарм!

1 голос
/ 19 июля 2011

Попробуйте задачу обновления граблей скрепки. Я использовал его для генерации новых стилей, и я полагаю, что это также поможет вам изменить ваш путь?

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

...