我想让Carrierwave与我的Amazon S3存储桶一起工作,但我对我的运气有点失望。在我的config/initializers
文件夹中,我有一个名为carrierwave.rb
的文件。该文件包含以下内容:Carrierwave,雾,亚马逊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
我现在用的宝石作为住房我的环境配置变量的机制。在application.yml
内部,我定义了ENV['AWS_ACCESS_KEY_ID']
,ENV['AWS_SECRET_ACCESS_KEY']
和ENV['AWS_S3_BUCKET']
。
这三个变量似乎正确填充。使用FTP程序,我可以使用我在application.yml
文件中定义的访问密钥和秘密访问密钥连接到我的amazon s3实例。我有三重检查,我的公众和秘密键是正确的。
当试图在我的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>
为了解决这个问题,我也试过:
- 创建一个新的Amazon S3存储桶
- 手动将access_key_id/secret_access_key/fog_directory放置在配置文件中。
这两个选项都不起作用。当我创建一个新的S3存储桶并在config.fog_directory
中指定它时,我收到了同样的错误。
当我在carrierwave.rb
文件中手动输入密钥和存储桶名称时,仍然收到相同的错误。
我试着在网上搜索一下答案,但大部分答案似乎是用户错误地输入了错误的访问密钥或密钥。我不认为这是这种情况,因为我已将密钥直接复制并粘贴到Amazon S3管理控制台中的carrierwave.rb
文件中。
如果任何人有任何你想我尝试的洞察力或事情,请随时留下评论。如果您需要更多信息,请告诉我,我会在这里发布。我的应用程序是Rails 4应用程序,具有以下宝石:
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">
有没有多余的空间?或者也许是关键的URL编码问题?奇怪的东西可能会起作用。 – Vidya
嘿,谢谢你的回复。我刚刚尝试使用访问密钥和秘密访问密钥(从亚马逊直接复制和粘贴)。仍然没有这样的运气:-(.. –
此外,我应该注意到,我每次进行配置更改时重新启动我的本地主机服务器,只是为了确保我开始干净。 –