我曾经有过这个有缺陷的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工作?
答案 0 :(得分:3)
我最终使用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
(当然我必须为每种附件样式重复它)
答案 1 :(得分:2)
您可以从迁移中运行Photo.find_each { |photo| photo.image.reprocess! }
,甚至可以在控制台中运行。
您可能还安装了rake任务,具体取决于您安装回形针的方式。您可以尝试运行rake paperclip:refresh CLASS=Photo
。如有必要,请不要忘记设置RAILS_ENV。
如果你想要rake任务但没有它们,那么该文件是here,可以直接删除到lib/tasks