Ich versuche Bilder mit Carrierwave (1.0.0 auf Rails 4.2) auf S3 hochzuladen. Ich bekomme 403 Zugriff verweigert. Wenn ich jedoch eine manuelle PUT
Anfrage mit Curl mache, funktioniert es ganz gut. Ich habe bestätigt, dass Rails meine Geheimnisse richtig liest. All dies bedeutet für mich, dass Excon irgendwie meine Anmeldeinformationen nicht sendet.Carrierwave-Upload nach S3 schlägt fehl, aber Curl funktioniert
Was kann ich tun?
Arbeiten curl Befehl:
$ file=airplane.jpg
$ bucket=mybucket
$ resource="/${bucket}/${file}"
$ contentType="image/jpeg"
$ dateValue=`date -R`
$ stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
$ s3Key=redacted:)
$ s3Secret=redacted:)
$ signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
$ curl -X PUT -T "${file}" \
> -H "Host: ${bucket}.s3.amazonaws.com" \
> -H "Date: ${dateValue}" \
> -H "Content-Type: ${contentType}" \
> -H "Authorization: AWS ${s3Key}:${signature}" \
> https://${bucket}.s3.amazonaws.com/${file}
Carrierwave config:
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: secrets[:aws_access_key_id],
aws_secret_access_key: secrets[:aws_secret_access_key],
region: 'eu-west-1',
host: 's3-eu-west-1.amazonaws.com'
}
config.fog_provider = 'fog/aws'
config.storage :fog
config.fog_directory = 'mybucket'
config.fog_public = true
config.fog_attributes = { 'Cache-Control' => 'max-age=315576000' }
EDIT: Ein Update - ich weiß nicht, was ich verändert, aber plötzlich erhalte ich die Fehler folgende wenn die Locke mit Befehl:
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message></Error>
Mögliches Duplikat von [Trägerwelle, Nebel, Amazon S3, Schienen 4] (https://stackoverflow.com/questions/19309864/carrierwave-fog-amazon-s3-rails-4) – henrebotha