我正在尝试使用AWS在开发中发布到S3,但它无法找到我的ssl包。我为Oauth安装了它,一旦我告诉它它在哪里,它工作正常。我似乎无法配置AWS以正确查看它。
OpenSSL::SSL::SSLError:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
这是我模特的配置:
has_attached_file :image,
:styles => { ... },
:storage => :s3,
:s3_credentials => {
:access_key_id => ACCESS_KEY,
:secret_access_key => SECRET_KEY,
:bucket => BUCKET,
:ssl_ca_file => '/opt/local/share/curl/curl-ca-bundle.crt'
}
我尝试添加:ssl_verify_peer => false
和:use_ssl => false
。这两项工作都没有,这让我觉得我在错误的地方配置AWS gem。有什么建议在哪里/我应该这样做?
我正在使用paperclip 2.4.0和aws-sdk 1.3.8
我还应该提一下,在使用rspec进行测试时会出现错误。
答案 0 :(得分:1)
在github aws-sdk页面的帮助下计算出来:https://github.com/amazonwebservices/aws-sdk-for-ruby
简而言之,我必须创建一个看似......的特定config/initializers/aws.rb
。
# load the libraries
require 'aws'
# log requests using the default rails logger
AWS.config(:logger => Rails.logger)
# load credentials from a file
config_path = File.expand_path(File.dirname(__FILE__)+"/../aws.yml")
AWS.config(YAML.load(File.read(config_path)))
我必须做的就是将我的config/s3.yml
文件移到config/aws.yml
。然后更改我的模型以使用该yml文件...
has_attached_file :image,
:styles => { ... },
:storage => :s3,
:s3_credentials => "#{Rails.root.to_s}/config/aws.yml"
并且照顾它。我怀疑,使用s3_credentials通过paperclip设置ssl属性不起作用,因为已经加载了aws对象。
为了完整起见,这是yml文件......
development:
access_key_id: ...
secret_access_key: ...
bucket: bucket_name
ssl_ca_file: /opt/local/share/curl/curl-ca-bundle.crt
test:
access_key_id: ...
secret_access_key: ...
bucket: bucket_name
ssl_ca_file: /opt/local/share/curl/curl-ca-bundle.crt
production:
access_key_id: ...
secret_access_key: ...
bucket: bucket_name
答案 1 :(得分:0)
你的水桶名称是什么?
如果你使用像foo.domain.com这样的东西作为存储桶,回形针将使用它作为主机名的前缀(foo.domain.com.aws.amazon.com),这将导致SSL验证问题。
尝试使用与主机名不相似的存储桶名称,例如mydomain-photos
确定网址的代码位于fog.rb:
if fog_credentials[:provider] == 'AWS'
if @options[:fog_directory].to_s =~ Fog::AWS_BUCKET_SUBDOMAIN_RESTRICTON_REGEX
"https://#{@options[:fog_directory]}.s3.amazonaws.com/#{path(style)}"
else
# directory is not a valid subdomain, so use path style for access
"https://s3.amazonaws.com/#{@options[:fog_directory]}/#{path(style)}"
end
else
directory.files.new(:key => path(style)).public_url
end
那个正则表达式是:
AWS_BUCKET_SUBDOMAIN_RESTRICTON_REGEX = /^(?:[a-z]|\d(?!\d{0,2}(?:\.\d{1,3}){3}$))(?:[a-z0-9]|\.(?![\.\-])|\-(?![\.])){1,61}[a-z0-9]$/