【问题标题】:Carrierwave fog Amazon S3 images not displayingCarrierwave 雾 Amazon S3 图像未显示
【发布时间】:2012-11-25 07:28:50
【问题描述】:

我已经安装了carrierwave和fog,已经成功上传了图片并第一次查看了,但是现在它不再显示图片了。

这是我的配置文件 app/config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                                       # required
    :aws_access_key_id      => 'AKIAJKOHTE4WTXCCXAMA',                      # required
    :aws_secret_access_key  => 'some secret key here',                      # required
    :region                 => 'eu-east-1',                                 # optional, defaults to 'us-east-1'
    :host                   => 'https://s3.amazonaws.com',                  # optional, defaults to nil
    :endpoint               => 'https://s3.amazonaws.com:8080'              # optional, defaults to nil
  }
  config.fog_directory  = 'createmysite.co.za'                    # required
  config.fog_public     = false                                   # optional, defaults to true
  #config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end

这就是应该显示的图像的 url 的样子

<img alt="Normal_selection_003" src="https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&amp;Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&amp;Expires=1354859553">

当我打开图片网址时,这是来自亚马逊的输出 https://createmysite.co.za.s3.amazonaws.com/uploads/portfolio/image/3/normal_Selection_003.png?AWSAccessKeyId=AKIAJKOHTE4WTXCCXAMA&Signature=8PLq8WCkfrkthmfVGfXX9K6s5fc%3D&Expires=1354859553

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3F179B7CE417BC12</RequestId>
<HostId>
zgh46a+G7UDdpIHEEIT0C/rmijShOKAzhPSbLpEeVgUre1iDc9f7TSOwaJdQpR65
</HostId>
</Error>

更新

新的配置文件(添加雾网址到期)app/config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',                                       # required
    :aws_access_key_id      => 'AKIAJKOHTE4WTXCCXAMA',                      # required
    :aws_secret_access_key  => 'chuck norris',  # required
  }
  config.fog_directory  = 'createmysite.co.za'                              # required
  config.fog_public     = false                                             # optional, defaults to true
  config.fog_authenticated_url_expiration = 600                             # (in seconds) => 10 minutes
end

像魅力一样工作!

【问题讨论】:

    标签: ruby-on-rails ruby amazon-s3 carrierwave fog


    【解决方案1】:

    您已将 config.fog_public 设置为 false 并使用 Amazon S3 进行存储。通过 S3 的私有文件的 URL 是临时的(它们已签名并且有期限)。具体来说,您问题中发布的 URL 有一个 Expires=1354859553 参数。

    1354859553Fri, 07 Dec 2012 05:52:33 GMT,这是从当前时间过去的时间,因此链接实际上已过期,这就是您收到 Access Denied 错误的原因。

    您可以通过设置进一步调整过期时间(默认为600秒)

    config.fog_authenticated_url_expiration = ... # some integer here
    

    如果你想要没有过期的链接

    • config.fog_public 设置为true
    • 让您的应用程序充当中间人,通过send_file 提供文件。 Here 是关于 SO 的至少一个问题,涉及此问题

    【讨论】:

    • 嗨,这听起来很正确!我一定有什么东西搞砸了哈哈!,我会发布更新
    • 哈哈,我的开发和生产有不同的数据库,所以图像没有显示在本地,拉取产品数据库,现在它似乎工作得很好。德克萨斯州!
    • 如果我在上传图片并在我的应用程序上运行时将fog_public 从 false 更改为 true,如何让图片正常工作?重新处理它们?
    • 您需要更改这些对象的 ACL 以允许“所有人”查看权限。一种方法是编写一个小脚本(甚至通过 Rails 应用程序执行 rake 任务) 来迭代存储桶中的对象,将每个对象标记为公开。查看 fog gem 中的 acl=。您只需为每个文件将其设置为"public-read" 并调用save。直接通过 AWS 面板可能有更简单的方法,但是您可以看到使用这个 gem 是多么简单。
    • 谢谢,这帮助我解决了同样的一般问题
    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 2012-01-22
    • 2013-10-19
    • 1970-01-01
    • 2016-12-09
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多