使用 rake 任务重命名回形针文件
Rename paperclip files with rake task
我在我的 rails 项目回形针中使用默认
上传了一些图像
path: ":class/:attachment/:id_partition/:style/:filename"
因此所有文件都上传到 amazon s3 存储桶中。
现在我想/需要将文件名更改为
path: ':class/:id/:style/:hash.:extension'
这适用于新上传的文件,但不再找到现有文件。
所以我尝试重新使用回形针 rake 刷新任务。
脚步:
- 使用旧路径加载所有附件,使用新路径保存,删除旧条目。
这是我目前的结果:
desc "Move renamed files"
task :move_renamed_files => :environment do
klass = Paperclip::Task.obtain_class
names = Paperclip::Task.obtain_attachments(klass)
names.each do |name|
Paperclip.each_instance_with_attachment(klass, name) do |instance|
attachment = instance.send(name)
if attachment.exists?
print "."
else
# No hit on new location, trying old location
org_path = attachment.options[:org_path]
new_path = attachment.options[:path]
attachment.options[:path] = org_path
if attachment.exists?
# Save file with new name
puts "#{attachment.url}"
attachment.options[:path] = new_path
instance.save(:validate => false)
# THIS DOES NOT WORK
#if attachment.save
# puts "Save OK"
#else
# puts "Save failed"
#end
else
Paperclip::Task.log_error("#{instance.class}##{attachment.name}, #{instance.id}, #{attachment.url}")
end
end
end
end
任何想法如何完成代码?
我绝对陷入其中。
我会深入研究 AWS::S3 库,因为您已经有了路径。如果你知道它有效,那就快点做吧。
AWS::S3::S3Object.rename(old_name, new_name, 'bucket_name')
此外,这可能会有所帮助:
http://blog.magmalabs.io/2015/11/25/rename-s3-assets-after-paperclip-hashing.html
已在此处创建了一个 github 工作项目:
https://github.com/tclaus/Rename-S3-assets-after-paperclip-hashing
我在我的 rails 项目回形针中使用默认
上传了一些图像path: ":class/:attachment/:id_partition/:style/:filename"
因此所有文件都上传到 amazon s3 存储桶中。
现在我想/需要将文件名更改为
path: ':class/:id/:style/:hash.:extension'
这适用于新上传的文件,但不再找到现有文件。 所以我尝试重新使用回形针 rake 刷新任务。 脚步: - 使用旧路径加载所有附件,使用新路径保存,删除旧条目。 这是我目前的结果:
desc "Move renamed files"
task :move_renamed_files => :environment do
klass = Paperclip::Task.obtain_class
names = Paperclip::Task.obtain_attachments(klass)
names.each do |name|
Paperclip.each_instance_with_attachment(klass, name) do |instance|
attachment = instance.send(name)
if attachment.exists?
print "."
else
# No hit on new location, trying old location
org_path = attachment.options[:org_path]
new_path = attachment.options[:path]
attachment.options[:path] = org_path
if attachment.exists?
# Save file with new name
puts "#{attachment.url}"
attachment.options[:path] = new_path
instance.save(:validate => false)
# THIS DOES NOT WORK
#if attachment.save
# puts "Save OK"
#else
# puts "Save failed"
#end
else
Paperclip::Task.log_error("#{instance.class}##{attachment.name}, #{instance.id}, #{attachment.url}")
end
end
end
end
任何想法如何完成代码? 我绝对陷入其中。
我会深入研究 AWS::S3 库,因为您已经有了路径。如果你知道它有效,那就快点做吧。
AWS::S3::S3Object.rename(old_name, new_name, 'bucket_name')
此外,这可能会有所帮助: http://blog.magmalabs.io/2015/11/25/rename-s3-assets-after-paperclip-hashing.html
已在此处创建了一个 github 工作项目:
https://github.com/tclaus/Rename-S3-assets-after-paperclip-hashing