nav*_*avi 5 ruby-on-rails amazon-s3 rails-activestorage
我正在尝试使用 Rails Active Storage 将照片上传到 S3。
我可以附上照片:
user.photo.attach(io: File.open('spec/images/filename.png'), filename: 'filename.png')
我可以保存用户,并且可以获取照片服务 URL 并在浏览器和我的存储桶中查看它:
user.photo.service_url
但是,如果我重新启动控制台并尝试获取服务 url,我会收到以下错误:
Module::DelegationError (service_url delegated to attachment, but attachment is nil)
这是我的存储桶设置:
存储.yml:
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: us-east-2
bucket: <%= Rails.application.credentials.dig(:aws, :bucket) %>
Run Code Online (Sandbox Code Playgroud)
应用程序.rb:
config.active_storage.service = :amazon
用户.rb:
has_one_attached :photo
public: true我在 storage.yml 文件中使用时也遇到问题。
如果我尝试设置配置,我会收到以下错误:
ArgumentError (Cannot load `Rails.config.active_storage.service`:)
invalid configuration option `:public'
Run Code Online (Sandbox Code Playgroud)
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: us-east-2
bucket: <%= Rails.application.credentials.dig(:aws, :bucket) %>
public: true
Run Code Online (Sandbox Code Playgroud)
我还想将我的文件上传到 AWS S3,并公开它们。
我也遇到了这个问题,发现如下:
ArgumentError (Cannot load `Rails.config.active_storage.service`:)
invalid configuration option `:public'
Run Code Online (Sandbox Code Playgroud)
来自gem中的这个文件aws-sdk-ruby。根据错误消息,aws-sdk-ruby gem 不支持该public: true选项。
我使用了以下解决方法(特别感谢这篇文章):
public_amazon:
service: S3
access_key_id: some_key
secret_access_key: some_secret
bucket: some-bucket-name
region: some-region
upload:
acl: "public-read"
Run Code Online (Sandbox Code Playgroud)
以上设置上传文件权限为公开。
user.photo.attach(params[:file])
url = user.photo.service.send(:object_for, user.photo.key).public_url
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |