使用carrierwave错误主机名将文件上传到amazon aws3 rails与服务器证书不匹配

时间:2016-02-19 16:24:33

标签: ruby-on-rails ruby amazon-web-services amazon-s3

我遵循了这个教程: http://lifesforlearning.com/uploading-images-with-carrierwave-to-s3-on-rails/ 我有工作的载波上传器,它将文件存储到磁盘空间 我一步一步做了什么: 1)添加fog gem并运行bundle installbundle update

2)在config / initializers中我创建了r3.rb文件:

CarrierWave.configure do |config|

      config.fog_credentials = {
          :provider               => 'AWS',
          :aws_access_key_id      => 'mykey',
          :aws_secret_access_key  => 'mysecretkey',
          :region                 => 'us-west-2' # Change this for different AWS region. 
      }
      config.fog_directory  = "bucket-main"
    end

我跑了轨道并尝试保存一些照片。但正如你在图片上看到的那样,我的存储桶是空的。所以它们必须存储在我的磁盘上。 现在我该怎么做?

enter image description here

更新我将存储更改为雾。

这是我的photouploader类代码:

# encoding: utf-8

class PhotoUploader < CarrierWave::Uploader::Base


  storage :fog
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

现在我收到了这个错误:

  

主机名“bucket-main.bucket-main.s3-us-west-1.amazonaws.com”没有   匹配服务器证书(OpenSSL :: SSL :: SSLError)

3 个答案:

答案 0 :(得分:1)

我最终通过更新解决了我的问题 bundle update fogbundle update carrierwave

答案 1 :(得分:0)

尝试将path_style添加到您的配置和fog_directory

config.fog_credentials = {
    ...
   :path_style => true
}
config.fog_directory = 'bucket-main'

答案 2 :(得分:0)

我只花了几个小时来追踪这个错误的原因,我也得到了:

  

hostname&#34; bucket-main.bucket-main.s3-us-west-1.amazonaws.com&#34;与服务器证书(OpenSSL :: SSL :: SSLError)

不匹配

奇怪的是如何在主机名中重复两次存储桶名称。事实证明我配置了错误的区域名称。请注意您的config.fog_credentials

  

:region => 'us-west-2'

...但例外中的主机名有s3-us-west-1?如果您的存储桶位于一个AWS区域中,但您在Fog凭据中配置了不同的区域,则Fog将尝试遵循AWS的重定向,并且在这种情况下,存储桶名称会以某种方式加倍。 Fog会发出关于重定向的警告,但Carrierwave最终会将此隐藏起来。

将您的Fog凭据中的:region设置为存储桶实际位于AWS中的位置,does not match the server certificate例外将停止发生。