从 ActiveStorage 迁移到 Shrine 的 Rake 任务
Rake task for migrating from ActiveStorage to Shrine
我有一个使用 ActiveStorage 和 S3 的 Rails 5.2 应用程序,但我一直遇到间歇性超时问题。我对另一个应用程序的神殿也更舒服一些。
我一直在尝试创建一个 rake 任务来循环遍历所有带有 ActiveStorage 附件的记录并将它们作为 Shrine 附件重新上传,但我遇到了一些问题。
我已经尝试通过 URL 和临时文件来做到这一点,但我不确定获取 activestorage 版本并将其上传到 S3 并保存在记录中的正确步骤作为神社附件。
我已经尝试过 rake 任务 here,但我认为该方法仅适用于 rails 6.
有什么提示或建议吗?
我敢肯定它不是最有效的,但它确实有效。
task :listing_images => :environment do
listings = Listing.all
listings.each do |listing|
if listing.exterior.attached?
# fetch file and save to tempfile
tempfile = Tempfile.new([listing.exterior.filename.base.to_s, listing.exterior.filename.extension_with_delimiter.to_s], Rails.root.join('tmp'))
tempfile.binmode
listing.exterior.send(:download_blob_to, tempfile)
# upload to S3 through shrine and save on column
uploader = ImageUploader.new(:store)
uploaded_file = uploader.upload(File.open(tempfile.path))
listing.update_columns(exterior_image_data: uploaded_file.to_json)
# generate different image sizes
generate_derivatives(listing.reload, view)
tempfile.close!
end
end
end
我有一个使用 ActiveStorage 和 S3 的 Rails 5.2 应用程序,但我一直遇到间歇性超时问题。我对另一个应用程序的神殿也更舒服一些。
我一直在尝试创建一个 rake 任务来循环遍历所有带有 ActiveStorage 附件的记录并将它们作为 Shrine 附件重新上传,但我遇到了一些问题。
我已经尝试通过 URL 和临时文件来做到这一点,但我不确定获取 activestorage 版本并将其上传到 S3 并保存在记录中的正确步骤作为神社附件。
我已经尝试过 rake 任务 here,但我认为该方法仅适用于 rails 6.
有什么提示或建议吗?
我敢肯定它不是最有效的,但它确实有效。
task :listing_images => :environment do
listings = Listing.all
listings.each do |listing|
if listing.exterior.attached?
# fetch file and save to tempfile
tempfile = Tempfile.new([listing.exterior.filename.base.to_s, listing.exterior.filename.extension_with_delimiter.to_s], Rails.root.join('tmp'))
tempfile.binmode
listing.exterior.send(:download_blob_to, tempfile)
# upload to S3 through shrine and save on column
uploader = ImageUploader.new(:store)
uploaded_file = uploader.upload(File.open(tempfile.path))
listing.update_columns(exterior_image_data: uploaded_file.to_json)
# generate different image sizes
generate_derivatives(listing.reload, view)
tempfile.close!
end
end
end