13

アプリを Rails 3.0.9 から 3.2.3 および ruby​​ 1.9.3 に移行しています。写真を保存するために aws-s3 gem で paperclip(2.3.11) を使用していました。

今、最後のバージョンの paperclip(3.0.1) を使用したいので、aws-sdk gem を使用する必要があります。

aws.yml ファイルを次のように設定しました。

    development: &development
      bucket: bucket_name_for_dev
      access_key_id: *****
      secret_access_key: *******
    staging:
      <<: *development
      bucket: bucket_name_for_staging

    production:
      <<: *development
      bucket: bucket_name_for_prod

私のモデルには以下が含まれます:

    has_attached_file :picture, :styles => { :medium => "300x300>", :thumb => "50x50>" }, :default_url => 'picture_missing.png',
         :storage => :s3,
         :bucket => "bucket_name_for_dev",
         :s3_credentials => Rails.root.join("config/aws.yml"),
         :path => "/presentation_pictures/:id/:style/:filename",
         :url  => ":s3_eu_url"

    attr_accessible :picture
    attr_accessor :picture_url

ファイルをアップロードしようとすると、次のエラーが表示されます。

AWS::S3::Errors::SignatureDoesNotMatch The request signature we calculated does not match the signature you provided. Check your key and signing method.

キーがアクセス可能で、正しい値に設定されていることを確認しました。

コンソールから取得したものも次のとおりです。

    [paperclip] Saving attachments.
    [paperclip] saving /presentation_pictures/43/original/Image_1.png
    [AWS S3 200 0.813272 0 retries] put_object(:acl=>:public_read,:bucket_name=>"*******_dev",:content_type=>"image/png",:data=>#<Paperclip::UploadedFileAdapter:0x2e144b4 @target=#<ActionDispatch::Http::UploadedFile:0x2dbb1fc @original_filename="Image 1.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"presentation_picture[picture]\"; filename=\"Image 1.png\"\r\nContent-Type: image/png\r\n", @tempfile=#<File:/var/folders/tb/tbmv4LE9EwGNPr1QqU2S0E+++TI/-Tmp-/RackMultipart20120407-33502-1gajfe9>>, @tempfile=#<File:/var/folders/tb/tbmv4LE9EwGNPr1QqU2S0E+++TI/-Tmp-/Image 1.png20120407-33502-an4dcy>>,:key=>"presentation_pictures/43/original/Image_1.png")

この問題がどこから来るのか、何か考えはありますか? どうも

4

3 に答える 3

16

同じ問題がありました。正しいアクセス キー ID を使用していたことが判明しましたが、秘密鍵が正しくコピーされていませんでした。

秘密鍵を再確認して修正すると、修正されました。

于 2014-06-19T03:52:02.390 に答える
1

正しい方法で aws にアクセスできないようです。特に米国以外の地域でバケットを使用する場合は、ホスト名を指定する必要があります。使ってみて

:s3_host_name => 's3-eu-west-1.amazonaws.com'

あなたhas_attached_fileのオプションで。

https を使用するように S3 を設定した場合は、追加も追加します

:s3_protocol => 'https' 

そうでない場合は、無視してください。

バケットがプライベート バケットの場合は、追加します

:s3_permissions => :private

また、オプション パラメータでバケットを明示的に設定する必要もありません。これは、aws.yml でバケットを宣言し、:s3_credentials => Rails.root.join("config/aws.yml").

お役に立てれば。

于 2012-07-02T07:45:20.353 に答える