【问题标题】:How do I set my AWS S3 Rails 5.2 ActiveStorage to public?如何将我的 AWS S3 Rails 5.2 ActiveStorage 设置为公开?
【发布时间】:2020-11-05 21:30:15
【问题描述】:

根据Rails guide,我可以将文件设置为公开。但是,当我尝试它时,我得到了这个错误:

Cannot load `Rails.config.active_storage.service`
invalid configuration option `:public'):

如果我删除storage.yml 文件中的public: true,它会起作用。但是文件本身是私有的,所以我的 Cloudflare CDN 无法提供它。

# config.storage.yml
amazon_dev:
  service: S3
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
  region: us-west-2
  public-read: true
  bucket: xxxxxx
# config/environments/development.rb
config.active_storage.service = :amazon_dev

还将 AWS S3 设置为公共: S3 bucket settings

还不能嵌入,所以这将是一个链接。

谢谢,

【问题讨论】:

  • 我想我遇到了同样的问题(尽管使用 DigitalOcean,但它与 S3 兼容)并且解决方案似乎是使用 s3cmd 遍历我的存储桶中的每个文件,直到它们全部公开,然后我可以部署 public: true 更改。

标签: ruby-on-rails amazon-s3 rails-activestorage ruby-on-rails-5.2


【解决方案1】:

这与您的 AWS 设置有关,而不是 Rails。

创建存储桶时,取消勾选“阻止所有公共访问”:

在仪表板中查看公共存储桶和私有存储桶的区别:

对于添加策略:

可能是这样的

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/"
            ]
        }
    ]
}

【讨论】:

  • 我忘了说我已经这样做了。编辑我的问题
  • 当我单击 S3 中的单个对象时,它显示拒绝访问。我实际上必须手动将每个对象公开,然后它才能工作。我需要一些可以扩展的东西。本质上,当 ActiveStorage 上传它时,它需要将其设置为 public-read。
  • 您希望如何通过您的应用访问公共对象?
  • 让它工作。除了允许它公开之外,我还制定了一个政策,让每个人都可以阅读它。谢谢你。我可以稍后通过将其限制为我的 CDN 来清理它。
  • 添加更完整的答案,以防有人来到这里。我添加了这个策略 { "Version":"2012-10-17", "Statement":[ { "Sid":"PublicRead", "Effect":"Allow", "Principal": "", "动作":["s3:GetObject","s3:GetObjectVersion"], "资源":["arn:aws:s3:::awsexamplebucket1/"] } ] }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2020-05-30
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多