- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有将大量回形针 S3 图像迁移到新的 :url 和 :path 格式的推荐技术?
这是因为升级到rails 3.1后,裁剪后没有显示新版本的拇指(显示以前缓存的版本)。这是因为文件名不再更改(因为在 rails 3.1 中删除了 asset_timestamp)。我在 url/path 格式中使用 :fingerprint,但这是从原始生成的,裁剪时不会改变。
我打算在 url/path 格式中插入 :updated_at,并在裁剪期间更新附件.updated_at,但在实现该更改后,所有现有图像都需要移动到新位置。大约有 50 万张图像需要在 S3 上重命名。
在这一点上,我正在考虑首先将它们复制到新位置,然后部署代码更改,然后移动任何丢失的图像(即在复制后上传),但我希望有更简单的方法......任何建议?
最佳答案
我不得不改变我的回形针路径以支持图像裁剪,我最终创建了一个 rake task帮忙。
namespace :paperclip_migration do
desc 'Migrate data'
task :migrate_s3 => :environment do
# Make sure that all of the models have been loaded so any attachments are registered
puts 'Loading models...'
Dir[Rails.root.join('app', 'models', '**/*')].each { |file| File.basename(file, '.rb').camelize.constantize }
# Iterate through all of the registered attachments
puts 'Migrating attachments...'
attachment_registry.each_definition do |klass, name, options|
puts "Migrating #{klass}: #{name}"
klass.find_each(batch_size: 100) do |instance|
attachment = instance.send(name)
unless attachment.blank?
attachment.styles.each do |style_name, style|
old_path = interpolator.interpolate(old_path_option, attachment, style_name)
new_path = interpolator.interpolate(new_path_option, attachment, style_name)
# puts "#{style_name}:\n\told: #{old_path}\n\tnew: #{new_path}"
s3_copy(s3_bucket, old_path, new_path)
end
end
end
end
puts 'Completed migration.'
end
#############################################################################
private
# Paperclip Configuration
def attachment_registry
Paperclip::AttachmentRegistry
end
def s3_bucket
ENV['S3_BUCKET']
end
def old_path_option
':class/:id_partition/:attachment/:hash.:extension'
end
def new_path_option
':class/:attachment/:id_partition/:style/:filename'
end
def interpolator
Paperclip::Interpolations
end
# S3
def s3
AWS::S3.new(access_key_id: ENV['S3_KEY'], secret_access_key: ENV['S3_SECRET'])
end
def s3_copy(bucket, source, destination)
source_object = s3.buckets[bucket].objects[source]
destination_object = source_object.copy_to(destination, {metadata: source_object.metadata.to_h})
destination_object.acl = source_object.acl
puts "Copied #{source}"
rescue Exception => e
puts "*Unable to copy #{source} - #{e.message}"
end
end
关于ruby-on-rails - 将回形针 S3 图像迁移到新的 url/路径格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875065/
这里是 Ruby 初学者!我正在尝试在 ruby 上创建一个 Soundcloud 克隆。当我尝试上传音频文件时出现错误: 1 个错误禁止保存这首歌: 音频中的内容与所报告的内容不同 Contro
这是我配置附件的方式: has_attached_file :image, {styles: { small: "64x64", med: "100x100", large: "200x200" },
最近我正在调整我的 rails 应用程序以在 JRuby 上运行。 我遇到的问题之一是 Paperclip。 Paperclip 使用 Cocaine 来运行命令行工具,如 ImageMagick,它
我是 RoR 回形针 gem 的新手,我一直在尝试有关多张图像上传的一些示例,并希望了解有关这个伟大 gem 的一些信息。 在一个例子中,我有一个相册模型,它允许用户上传多张图片。我注意到图像存储在
有没有人有多个附件的 Rails 3 示例,可以在多部分表单上进行验证?我一直试图让它永远工作(并且找到了我能找到的所有博客文章和消息,但没有一个涵盖这种情况,而且文档根本没有帮助)。 第一个问题
当用户在我的应用程序中编辑某些内容时,即使他们没有更改图像,他们也被迫通过回形针重新上传图像。不这样做会导致错误,因为我validate_presence_of :image。这很烦人。 如果用户根本
我正在使用回形针在我的 Rails 应用程序中上传和显示图像。 '') %> 上面的代码显示图像的缩略图。 我想让缩略图成为一个链接,以便当用户点击它时,会显示一个显示原始图像的弹出窗口。 我尝
我希望用户能够保存最多 5 个文件(任何少于这个都很好),所以这是我的新操作(place_photos 是回形针附件,Place :has_many PlacePhoto): def new @p
我正在一个需要接受文件上传的项目。文件上传后,我要进行一些处理-从文件中提取信息。我最终计划在后台工作人员中运行此程序,但当前正在内联运行。 我尝试过同时使用after_create和after_sa
我正在使用回形针来处理我的文件上传,并且在一种情况下我不希望该文件是强制性的。但是,我确实想确保它存在时是特定的文件类型。 我有这个: class TestModel ['audio/mp3', '
我正在使用 Paperclip 4.1.1用于图片上传。我存储三种尺寸,原始尺寸、中等尺寸和缩略图尺寸。当我尝试显示原始图像时,其中一些图像向左旋转,并且随机发生,因为其他一些图像显示正确。中等大小和
我已经成功实现了 jcrop 和回形针,通过转到另一个页面(即 crop.html.erb)来裁剪图像。但我希望能够在当前页面上进行所有裁剪,在弹出的 div/对话框中上传图像。因此,我需要以某种方式
如果我将两个具有相似文件名的文件保存到同一目录中,一个文件将覆盖另一个文件。如何使下面的方式工作,比方说,目录中已经有 picture.jpg,如果我将另一个 picture.jpg 上传到同一目录,
我发现这个教程 (http://www.coffeepowered.net/2009/02/15/graceful-degredation-using-gravatar-as-a-fallback-a
我有一个主题模型,其中包含许多 Assets 。 Assets 使用 Paperclip 并将其文件内容存储在我的 Amazon AWS-S3 系统中。我也在使用 deep_clone,因为我的客户能
当我尝试在回形针-ffmpeg 中上传 .mov 视频时,会出现错误 Video content type is invalid in paperclip-ffmpeg 我的代码是 has_attac
所以,我正在使用 Paperclip 和 AWS-S3,这很棒。而且效果很好。不过,只有一个问题:我需要上传非常大的文件。如超过 50 兆字节。就这样,nginx 死了。那么显然Paperclip在进
我正在尝试查找有关如何设置Paperclip以使用fog.io和fog.io以使用Rackspace Cloud File的文档,但是我找不到任何好的引用文献(而且我认为自己是一位出色的Google语
当我尝试在 Ruby on Rails 上传照片时使用 Paperclip在我的本地机器上,它运行良好。 当我尝试在带有 Apache 和 CentOS 的 Linux(Phusion Passeng
除了动态文件大小限制之外,还有 validates_attachment_size 吗?这是一个例子: class Document get_current_file_size_limit p
我是一名优秀的程序员,十分优秀!