4

Carrierwave を Amazon S3 バケットで動作させようとしていますが、運が少し悪いです。私のconfig/initializersフォルダには、というファイルがありますcarrierwave.rb。このファイルには次のものが含まれます。

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環境構成変数を格納するメカニズムとしてgem を使用しています。の中で、、、および をapplication.yml定義しています。ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY']ENV['AWS_S3_BUCKET']

これら 3 つの変数は適切に設定されているようです。FTP プログラムを使用して、ファイルで定義したアクセス キーとシークレット アクセス キーを使用して、Amazon s3 インスタンスに接続できapplication.ymlます。公開鍵と秘密鍵が正しいことを 3 回確認しました。

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 バケットを作成する
  2. access_key_id / secret_access_key / fog_directory を構成ファイルに手動で配置します。

これら 2 つのオプションはどちらも機能していないようです。新しい S3 バケットを作成して で指定するとconfig.fog_directory、同じエラーが発生しました。

ファイルにキーとバケット名を手動で入力してcarrierwave.rbも、同じエラーが発生しました。

答えを求めて Web を少し検索してみましたが、ほとんどの答えは、ユーザーが誤って間違ったアクセス キーまたはシークレット キーを入力したことによるものです。carrierwave.rbAmazon の S3 マネジメント コンソールからキーをファイルに直接コピー アンド ペーストしたので、これがここに当てはまるとは思いません。

誰かが私に試してほしいことや洞察を持っている場合は、お気軽にコメントを残してください. さらに情報が必要な場合はお知らせください。ここに投稿します。私のアプリケーションは Rails 4 アプリで、次の gem があります。

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

前もって感謝します!

編集:いくつかの追加:

新しいキーのセットを作成しようとしましたが、もう一度キーをコピーして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">
4

1 に答える 1

7

Fog が S3 バケットに接続するために「excon」を使用しているように見えます。霧と excon 0.27.2 を削除して問題を解決しました。gemに切り替えましたcarrierwave-aws(同じ資格情報を使用し、すべてが期待どおりに機能しています)。

于 2013-10-11T12:48:26.240 に答える