我一直关注this guide直接使用回形针以及this blog post进行S3上传,建议对之前链接的指南进行一些有用的调整。我唯一的区别是我的模型名称是照片而不是文档。
我正在将原始文件成功上传到我的存储桶,但是photo.rb中的before_create操作(指南中的document.rb)在此行失败:
direct_upload_head = s3.buckets[Rails.configuration.aws[:bucket]].objects[direct_upload_url_data[:path]].head
rails服务器控制台显示以下错误:
OpenSSL :: SSL :: SSLError(主机名与服务器证书不匹配): app / models / photo.rb:56:在`set_upload_attributes'
我之前因为格式错误而导致DIRECT_UPLOAD_URL_FORMAT验证失败,因此我稍微修改了一下,以便与paperclip生成的direct_upload_url相匹配。我的修改版本是:
DIRECT_UPLOAD_URL_FORMAT = %r{\Ahttps:\/\/#{Rails.configuration.aws[:region]}\.amazonaws\.com\/#{Rails.configuration.aws[:bucket]}\/(?<path>uploads\/.+\/(?<filename>.+))\z}.freeze
这匹配控制台中显示的网址格式:
“照片”=&GT; { “direct_upload_url”=&gt; “中https://s3-eu-west-1.amazonaws.com/mybucketname/uploads%2F1389613985667-mo4ncxxus0q0vn29-d78ac9dc4f18fa612e33c87ec9ad0f4e%2Fmiddy.jpg”}
在修改DIRECT_UPLOAD_URL_FORMAT之后,我让它通过了验证并且出现了SSL错误。
我注意到在控制台中显示的网址中,正在发布的网址中,“上传”和文件夹名称之后没有显示正斜杠,但它们会在此之前显示。这可能与它不符合SSL要求有关吗?
除了在必要时切换为“照片”的“文档”之外,所有其他代码都与指南中的内容相匹配。
我能做些什么来满足SSL要求吗?
编辑: 我还要提一下,我把'mybucketname'放在引用的url中我的实际存储桶名称与没有点或短划线等的格式匹配,只是小写字母。
答案 0 :(得分:0)
事实证明,我的问题是由我为我的桶选择的区域引起的。
本教程设置为使用仅适用于美国标准区域的路径样式URL。
我为我的开发桶选择了一个欧盟地区(爱尔兰),并且未能成功修改代码以使用非美国标准存储桶所需的域样式URL。
我在亚马逊的文档中找到了“Bucket Access”标题下的信息: http://docs.aws.amazon.com/AmazonS3/latest/dev/LocationSelection.html
我对我的代码现在如何工作感到满意,但我将继续研究如何修改代码以使用Ireland存储区域来减少开发过程中的延迟。