Rails Active Storage & AWS S3 : 如何通过 seeds.rb 将图像附加到模型,然后将其存储在 S3 私有存储桶中?
Rails Active Storage & AWS S3 : How to attach image to model through seeds.rb and then store it in S3 private bucket?
为了一个学校项目,我正在开发一个 Rails 应用程序,该应用程序“出售”小猫的照片。我在网上挑选了 10 张猫的照片,它们目前在我的电脑上。我正在为数据库使用 Postgresql。我有一个 class/model Item
代表小猫照片。
我正在寻找一种方法,当通过 seeds.rb
循环生成假数据时,将小猫照片附加到每个 Item
class/model,然后将其存储到已创建的 AWS S3 存储桶(称为 catz-temple)。我在 .env
文件上有我的两个访问和秘密 S3 密钥,我已经像这样修改了我的 storage.yml
文件:
amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: eu-central-1
bucket: catz-temple
我发现有一个 gem 叫做 aws-sdk-ruby
,但我就是找不到关于这个主题的方法。
目前,我只是将我的存储桶放入 public 访问权限并获取每个存储桶照片的 url,但是没有 API 和安全的方法...
谢谢大家
首先按照 configuring ActiveStorage and S3 的指南进行操作。然后在您的模型上设置附件。
class Kitteh < ApplicationRecord
has_one_attached :photo
end
使用 ActiveStorage,您可以 directly attach files to records 通过传递 IO 对象:
photos = Rails.root.join('path/to/the/images', '*.{jpg,gif,png}')
100.times do |n|
path = photos.sample
File.open(path) do |file|
Kitteh.new(name: "Kitteh #{n}") do |k|
k.photo.attach(
io: file,
filename: path.basename
)
end.save!
end
end
此示例使用从您硬盘上的目录中选择的随机图像创建 100 条记录,并将其上传到您配置的存储空间。
为了一个学校项目,我正在开发一个 Rails 应用程序,该应用程序“出售”小猫的照片。我在网上挑选了 10 张猫的照片,它们目前在我的电脑上。我正在为数据库使用 Postgresql。我有一个 class/model Item
代表小猫照片。
我正在寻找一种方法,当通过 seeds.rb
循环生成假数据时,将小猫照片附加到每个 Item
class/model,然后将其存储到已创建的 AWS S3 存储桶(称为 catz-temple)。我在 .env
文件上有我的两个访问和秘密 S3 密钥,我已经像这样修改了我的 storage.yml
文件:
amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: eu-central-1
bucket: catz-temple
我发现有一个 gem 叫做 aws-sdk-ruby
,但我就是找不到关于这个主题的方法。
目前,我只是将我的存储桶放入 public 访问权限并获取每个存储桶照片的 url,但是没有 API 和安全的方法...
谢谢大家
首先按照 configuring ActiveStorage and S3 的指南进行操作。然后在您的模型上设置附件。
class Kitteh < ApplicationRecord
has_one_attached :photo
end
使用 ActiveStorage,您可以 directly attach files to records 通过传递 IO 对象:
photos = Rails.root.join('path/to/the/images', '*.{jpg,gif,png}')
100.times do |n|
path = photos.sample
File.open(path) do |file|
Kitteh.new(name: "Kitteh #{n}") do |k|
k.photo.attach(
io: file,
filename: path.basename
)
end.save!
end
end
此示例使用从您硬盘上的目录中选择的随机图像创建 100 条记录,并将其上传到您配置的存储空间。