Ruby on rails 更新已创建的回形针附件的路径
我以前有一辆四轮马车的回形针配置:Ruby on rails 更新已创建的回形针附件的路径,ruby-on-rails,attachment,paperclip,Ruby On Rails,Attachment,Paperclip,我以前有一辆四轮马车的回形针配置: class Photo < ActiveRecord::Base has_attached_file :image, :storage => :s3, :styles => { :medium => "600x600>", :small => "320x320>", :thumb => "100x100#" }, :s3_cre
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:s3,
:style=>{:medium=>“600x600>”,:small=>“320x320>”,:thumb=>“100x100#”},
:s3_credentials=>“#{RAILS_ROOT}/config/s3.yml”,
:path=>“/:style/:filename”
结束
这是错误的,因为两个图像不能具有相同的大小和文件名。为了解决这个问题,我将配置更改为:
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
class-Photo:s3,
:style=>{:medium=>“600x600>”,:small=>“320x320>”,:thumb=>“100x100#”},
:s3_credentials=>“#{RAILS_ROOT}/config/s3.yml”,
:path=>“/:style/:id\uu:filename”
结束
不幸的是,这会破坏我已经创建的所有附件的URL。如何更新这些文件路径或以其他方式使URL工作?您可以通过迁移运行
Photo.find_each{Photo | Photo.image.reprocess!}
,甚至在控制台内运行
您可能已经安装了一个rake任务来完成这项工作,具体取决于您安装回形针的方式。您可以尝试运行rake-paperclip:refresh CLASS=Photo
。如有必要,不要忘记设置RAILS_ENV
如果您想要rake任务,但没有,则该文件是,并且可以直接放入
lib/tasks
中。最后,我使用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
(当然,我必须为每种附件样式重复此操作)这似乎是正确的方法,但不起作用。例如,假设一个图像的旧路径是“a/b.png”,我想将其重新处理为“a/123_b.png”。因为我有
:path=>“/:style/:id\uu:filename”
,所以回形针在“a/123_b.png”处寻找附件进行重新处理,我得到了一个AWS::S3::NoSuchKey
错误哦,我明白了,所以即使原始路径也会改变。在这种情况下,你必须手工操作,这是一个很糟糕的问题。这个答案根本不起作用,因为重新处理代码>取决于路径在模型中的定义方式。最初的问题是问如何重新定义路径。