使用S3和Paperclip时,此服务器的证书无效

时间:2016-11-03 03:24:53

标签: ruby-on-rails heroku amazon-s3 paperclip production

我正在 Heroku 中部署的 Rails 5 应用程序中工作。我使用 Postgrsql 进行数据存储,使用 Paperclip 来管理图片上传,使用 AWS S3 来存储所有上传的图片。

为了实现这一目标,我使用了非常详细和有用的tutorial from Heroku dev,这对我帮助很大。

我使用development env的相同配置来测试它。实际上它就像开发中的魅力一样。

当我部署到Heroku并运行迁移后,设置ENV变量我创建了一个新的Brochure,它接受​​封面图像;一切都很顺利图像正确存储在AWS S3中。

但是当我在一个视图中渲染图像时,我只是没有工作。我在浏览器控制台中遇到以下错误:

Safari浏览器:

Failed to load resource: The certificate for this server is invalid. You might be connecting to a server that is pretending to be “sponsors.matchxperience.s3.amazonaws.com” which could put your confidential information at risk.

enter image description here

Chrom canary:

Failed to load resource: net::ERR_INSECURE_RESPONSE

enter image description here

我不知道这件事是什么,因为在开发环境中一切正常。

任何人都可以帮我解决这个问题或任何想法:

production.rb (在development.rb中相同)

Rails.application.configure do
  # We’ll also need to specify the AWS configuration variables for the production Environment.
  config.paperclip_defaults = {
    storage: :s3,
    # s3_protocol: 'http',
    s3_credentials: {
      bucket: ENV.fetch('AWS_S3_BUCKET'),
      access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
      secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
      s3_region: ENV.fetch('AWS_REGION')
    }
  }
end

brochure.rb

class Brochure < ApplicationRecord
  # This method associates the attribute ":cover" with a file attachment
  has_attached_file :cover, styles: {
    card: '500x330#',
  }

  # Validate the attached image is image/jpg, image/png, etc
  validates_attachment_content_type :cover, :content_type => /\Aimage\/.*\Z/
end

paperclip.rb at config / initializers /

Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'

1 个答案:

答案 0 :(得分:1)

在搜索和阅读此错误的不同来源后,我发现了许多不同的解决方案,但是没有人似乎直接与Rails 5有关,而且我真的不喜欢Ruby或Rails。

我确信它与 AWS S3 服务器有关,我说得对, 我修复了 。最后阅读creating a new bucket的官方文档,我意识到这简直太荒谬了。

在文档中,我们可以在我们的广告素材名称中使用句点.和连字符-

  

可以包含小写字母,数字,句点(。)和连字符( - )。

     

必须以数字或字母开头。

     

长度必须介于3到63个字符之间。

     

...

所以,我把我的桶命名为:

sponsors.matchxperience

哪个是正确的, 但是 谈论服务器的网址它可能会混淆浏览器的请求点到我的情况下发生的不同的服务器。这就是我收到错误的原因。

解决方案

只需创建另一个存储桶(或重命名实际的存储空间)并复制所有名为的内容:

sponsors-matchxperience

神奇地说它在Heroku的生产中运行良好。我不知道AWS文档发生了什么,但对我而言,我的存储桶名称中的错误是句点.

我希望它对其他人有用。