2013-10-11 3 views
3

Я пытаюсь заставить Carrierwave работать с моим ковшом Amazon S3, но я немного разочарован своей удачей. В моей папке config/initializers у меня есть файл с именем, carrierwave.rb. Этот файл содержит следующее:Carrierwave, Fog, Amazon S3, Rails 4

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS', 
     :aws_access_key_id  => ENV['AWS_ACCESS_KEY_ID'], 
     :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    config.cache_dir = "#{Rails.root}/tmp/uploads" 
    config.fog_directory = ENV['AWS_S3_BUCKET'] 
    config.fog_public  = true 
    config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} 
end 

Я использую камень figaro в качестве механизма для жилья моей переменной конфигурации среды. Внутри application.yml я определяю ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'] и ENV['AWS_S3_BUCKET'].

Эти три переменные, кажется, заполняются должным образом. Используя FTP-программу, я могу подключиться к своему экземпляру amazon s3, используя ключ доступа и секретные ключи доступа, которые я определил в файле application.yml. Я трижды проверил, что мои общественные и секретные ключи являются правильными.

При попытке выполнить загрузку в моем приложении Rails, я получаю ошибку о том, что:

Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fb29a862ac8 
@data={:body=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error>< 
Code>SignatureDoesNotMatch</Code> 
<Message>The request signature we calculated does not match the signature you provided. 
Check your key and signing method.</Message> 

Чтобы исправить это, я также пытался:

  1. Создать новый Amazon S3 bucket
  2. Ручное размещение файла access_key_id/ secret_access_key/fog_directory в файле конфигурации.

Ни один из этих двух вариантов, похоже, не работает. Когда я создал новый ведро S3 и указал его в config.fog_directory, я получил ту же ошибку.

Когда я вручную набрал ключи и имя ведра в файле carrierwave.rb, я все равно получил ту же ошибку.

Я попытался найти в Интернете немного ответа, но большинство ответов, похоже, ошибочно вводит неверный ключ доступа или секретный ключ. Я не считаю, что это имеет место здесь, поскольку я скопировал и вставлял ключи непосредственно в файл carrierwave.rb из моей консоли управления S3 на Amazon.

Если у кого есть какие-либо идеи или вещи, которые вы хотели бы, чтобы я попытался, пожалуйста, оставляйте комментарии. Если вам нужна дополнительная информация, сообщите мне, и я отправлю ее здесь. Мое приложение - это приложение Rails 4 со следующими драгоценными камнями:

gem 'carrierwave' 
gem 'fog', github: 'fog/fog' 
gem 'mini_magick' 
gem 'figaro' 

Заранее спасибо!

Edit: Несколько дополнений:

Я только сейчас попытался создать новый набор ключей и еще раз скопировать + вставить ключи в мой carrierwave.rb файл. Я по-прежнему получаю такую ​​же ошибку. Мой файл теперь звучит следующим образом:

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS', 
     :aws_access_key_id  => "***********", 
     :aws_secret_access_key => "***********" 
    } 

    config.cache_dir = "#{Rails.root}/tmp/uploads" 
    config.fog_directory = 'soawsthree' 
    config.fog_public  = true 
    config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} 
end 

-

ответ от S3 Ковш. Примечание. Ключ общего доступа, указанный ниже, является правильным. Не знаете, куда передается секретный ключ доступа?:

Expected(200) <=> Actual(403 Forbidden) response => #<Excon::Response:0x007fc6e3997008 @data={:body=>"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUT\n\nimage/png\nFri, 11 Oct 2013 04:10:41 +0000\nx-amz-acl:public-read\n/uploads/photo/pic/3/touch.png</StringToSign><AWSAccessKeyId>AKIAIKNIDTDI2WI7RPNA</AWSAccessKeyId></Error>", :headers=>{"x-amz-request-id"=>"22E53DA9E453D05E", "x-amz-id-2"=>"ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Fri, 11 Oct 2013 04:10:34 GMT", "nnCoection"=>"close", "Server"=>"AmazonS3"}, :status=>403, :remote_ip=>"72.21.195.65"}, @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><StringToSignBytes>50 55 54 0a 0a 69 6d 61 67 65 2f 70 6e 67 0a 46 72 69 2c 20 31 31 20 4f 63 74 20 32 30 31 33 20 30 34 3a 31 30 3a 34 31 20 2b 30 30 30 30 0a 78 2d 61 6d 7a 2d 61 63 6c 3a 70 75 62 6c 69 63 2d 72 65 61 64 0a 2f 75 70 6c 6f 61 64 73 2f 70 68 6f 74 6f 2f 70 69 63 2f 33 2f 74 6f 75 63 68 2e 70 6e 67</StringToSignBytes><RequestId>22E53DA9E453D05E</RequestId><HostId>ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3</HostId><SignatureProvided>hiogXz0b65S/bOSWKvca7hyXzYI=</SignatureProvided><StringToSign>PUT\n\nimage/png\nFri, 11 Oct 2013 04:10:41 +0000\nx-amz-acl:public-read\n/uploads/photo/pic/3/touch.png</StringToSign><AWSAccessKeyId>AKIAIKNIDTDI2WI7RPNA</AWSAccessKeyId></Error>", @headers={"x-amz-request-id"=>"22E53DA9E453D05E", "x-amz-id-2"=>"ccNccOFV+iJa3/BM9RiwAqEwmJhr1KIMvmFm0EjhrBGkN4hwMWOuRF7qH5diDYd3", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Fri, 11 Oct 2013 04:10:34 GMT", "nnCoection"=>"close", "Server"=>"AmazonS3"}, @status=403, @remote_ip="72.21.195.65"> 
+0

Есть ли вероятность наличия посторонних пространств? Или, возможно, проблема с кодировкой URL с ключом? Такие странные вещи могут быть в игре. – Vidya

+0

Эй, спасибо за ответ. Я просто попробовал еще раз с ключом доступа и секретным ключом доступа (скопирован и вставлен непосредственно с amazon). Еще не повезло :(( –

+0

Кроме того, я должен отметить, что каждый раз, когда я делаю изменение конфигурации, я перезапускаю свой сервер localhost, чтобы убедиться, что я начинаю чист. –

ответ

6

Похоже, что Fog использует 'excon' для соединения с ведром S3. Я решил проблему, удалив туман и excon 0.27.2. Я переключился на жемчужину carrierwave-aws (используя те же учетные данные, и все работает как ожидалось).

+0

Хорошая работа, попадающая в сердце дело. – Vidya

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