2012-03-26 3 views
0

Я пытаюсь отправить сообщение на S3 с использованием AWS в разработке, но он не может найти мой пакет ssl. Я установил его для Oauth, и как только я расскажу, где он, он работает нормально. Кажется, я не могу настроить AWS, чтобы увидеть его правильно.Rails + paperclip + S3 + OSX = ошибка OpenSSL

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 в неправильном месте. Любые предложения, где/как я должен это делать?

Я использую 2.4.0 скрепки и AWS-1.3.8 SDK

Я должен также упомянуть, что ошибка при тестировании с RSpec.

ответ

1

Фигурные его с помощью АМС-SDk странице GitHub: 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" 

И это позаботилось об этом. Как я подозревал, установка свойств ssl через скрепку с помощью s3_credentials не работала, потому что объект 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 
0

Ваше имя ведра?

Если вы используете что-то вроде foo.domain.com в качестве ведра, paperclip будет использовать его в качестве префикса для имени хоста (foo.domain.com.aws.amazon.com), что вызовет проблемы с проверкой SSL ,

Попробуйте использовать имя блока, который не похож на имя хоста, как mydomain-photos

Код для определения URL находится в 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]$/ 
+0

Ах, интересно, но без точек в имени ведра 'domain_env' – vansan

+0

правого - видеть мои изменения для более подробной информации – klochner

+0

MYDOMAIN-фотография проходит регулярное выражение. подчеркивания или смешанный случай потерпят неудачу и станут лучшим выбором. –

Смежные вопросы