我在S3的存储桶中加载了图像,我希望种子中需要这些文件。
这是我实际的seed.rb(使用我通过主动存储存储在本地的图像):
require 'faker'
Item.destroy_all
20.times do |i|
item = Item.create!(
title: Faker::Games::Pokemon.name,
description: Faker::Lorem.paragraph_by_chars(60, false),
price: 5.0)
item.image.attach(io: File.open("app/assets/images/chatons/#{i}.jpg"), filename: "#{i}.jpg")
end
所以我有两个简单的问题:
答案 0 :(得分:0)
是的,可以从AWS S3对象存储中的文件播种db。您将需要AWS_SDK for Ruby
我在下面修改了您的seed.rb文件:
require 'faker'
require 'aws-sdk-s3'
s3 = Aws::S3::Resource.new(region: 'us-west-2') # Change this to your region
Item.destroy_all
20.times do |i|
item = Item.create!(
title: Faker::Games::Pokemon.name,
description: Faker::Lorem.paragraph_by_chars(60, false),
price: 5.0)
# Create the object to retrieve
obj = s3.bucket('my-bucket').object('#{i}.jpg') # change this to your bucket name
# Get the item's content and save it to local
obj.get(response_target: 'app/assets/images/chatons/#{i}.jpg')
item.image.attach(io: File.open("app/assets/images/chatons/#{i}.jpg"), filename: "#{i}.jpg")
end
我确定可以对其进行优化。例如,您可能不需要将其保存在本地,或者附加图像后可能会删除本地版本。
适用于Ruby的AWS开发工具包文档说明了如何将AWS凭证设置为环境变量,因此您无需公开访问映像。