Обновить пути уже созданных вложений Paperclip - PullRequest
3 голосов
/ 16 июня 2010

Раньше у меня была эта глючная конфигурация Paperclip:

class Photo < ActiveRecord::Base

  has_attached_file :image, :storage => :s3,
                    :styles => { :medium => "600x600>", :small => "320x320>", :thumb => "100x100#" },
                    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                    :path => "/:style/:filename"
end

Это ошибка, потому что два изображения не могут иметь одинаковый размер и имя файла. Чтобы это исправить, я изменил конфигурацию на:

class Photo < ActiveRecord::Base

  has_attached_file :image, :storage => :s3,
                    :styles => { :medium => "600x600>", :small => "320x320>", :thumb => "100x100#" },
                    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                    :path => "/:style/:id_:filename"
end

К сожалению, это разрывает все URL-адреса уже созданных вложений. Как я могу обновить эти пути к файлам или иным образом заставить работать URL-адреса?

Ответы [ 2 ]

3 голосов
/ 18 июня 2010

Я закончил делать это вручную с aws-s3 gem:

Photo.all.map{|p| [p.image.path(:thumb), "/thumb/#{p.id}_#{p.image_file_name}"]}.each do |p|
  if AWS::S3::S3Object.exists? p[0], bucket_name
    AWS::S3::S3Object.rename p[0], p[1], bucket_name
  end
end

(Конечно, я должен был повторить это для каждого стиля вложения)

2 голосов
/ 16 июня 2010

Вы можете запустить Photo.find_each { |photo| photo.image.reprocess! } из переноса или даже из консоли.

Для этого может быть установлена ​​задача rake, в зависимости от того, как вы установили скрепку.Вы можете попробовать запустить rake paperclip:refresh CLASS=Photo.Не забудьте также установить RAILS_ENV, если это необходимо.

Если вам нужны грабли, а у вас их нет, файл будет здесь и может быть перетащен непосредственно в lib/tasks

...