ruby-on-rails - Rails Active Storage - 如何将本地文件迁移到 s3 存储桶
问题描述
早些时候我的文件上传到存储文件夹中。但现在我想在 s3 存储桶上上传图片。如何迁移 s3 存储桶上的现有本地数据?
我在这里找到了脚本https://www.stefanwienert.de/blog/2018/11/05/active-storage-migrate-between-providers-from-local-to-amazon/ 但是得到一个错误
NoMethodError(为 Active Storage 调用私有方法 `open'
那么如何将本地数据迁移到 s3 存储桶呢?
有没有更简单的方法?
解决方案
一种更简单的方法:
- 将一个
amazon
部分添加到您的config/storage.yml
喜欢
将您的存储服务更改
:amazon
为config/environments/production.rb
将此 rake 任务添加为
lib/tasks/storage.yml
namespace :storage do
task reupload: :environment do
[User, Event].each do |clazz|
collection = clazz.with_attached_image
puts "#{clazz} has #{collection.count} images"
collection.find_each do |user|
next unless user.image.blob
user
.image
.blob
.open do |f|
user.image.attach(io: f, filename: user.image.blob.filename)
end
print "."
end
puts
end
end
end
在本地运行和测试以尝试
rake storage:reupload
(并更改为config.active_storage.service = :amazon
inconfig/environments/development.rb
)检查本地是否一切正常(您的图像应链接到您的 AWS URL)
上传到您的服务器(
cap deploy
例如)RAILS_ENV=production bundle exec rake storage:reupload
在你的项目目录中运行稍等一下,具体取决于您要重新上传的图像数量
利润!享受!晚会时间!
优点
- 不要做任何猴子补丁
- 不依赖 Rails 内部,例如https://github.com/rails/rails/issues/41636
- 简单的代码
缺点
- 没有让它工作,
has_many_attached
但不应该有太多的变化 - 你必须选择你的模型
- 它假设它都是命名的
image
(没有什么太难修复的)
推荐阅读
- azure-web-app-service - 即使在 azure 上为应用服务启用了 Http2.0,部署在 azure 上的 React 应用程序也没有使用 Http2
- flutter - 在 just_audio 插件中暂停后继续我的音乐
- web-scraping - 如何保存飞溅饼干
- python - 在 for 循环的每次迭代中更改线图的颜色
- javascript - TypeError:无法在“HTMLSelectElement”上执行“添加”:提供的值不是“(HTMLOptionElement 或 HTMLOptGroupElement)”类型
- kubernetes - 从 kubernetes 访问 azure databricks 数据
- c - 如何实现数据输入验证
- git - 如何自动化一系列复杂的 git 历史重写?
- javascript - Jquery脚本不在脚本中工作但在控制台中工作
- amazon-web-services - AWS 爬虫卡在 STOPPING 状态