带有S3的回形针 - AWS :: S3 ::错误:: InvalidAccessKeyId

时间:2016-03-11 04:37:01

标签: ruby-on-rails ruby-on-rails-4 amazon-s3 paperclip aws-sdk

我正在尝试使用S3作为Paperclip上传文件的主机。 S3服务器位于中国北京地区。

# Gemfile
gem 'aws-sdk', '< 2.0'
gem 'paperclip', "~> 4.2"

我使用环境变量设置了AWS。

AWS_ACCESS_KEY_ID: <access key>
AWS_SECRET_ACCESS_KEY: <secret key>
AWS_REGION: 'cn-north-1'

AWS设置应该会成功,因为我可以使用

在Rails控制台中创建存储桶
AWS::S3.new.buckets.create('dns-compat-bucket-name')

我的Paperclip配置如下

# config/environments/development.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_host_name => 's3.cn-north-1.amazonaws.com.cn',
  :bucket => 'superayi-prod-beijing'
}  

然而,我仍然得到错误: AWS::S3::Errors::InvalidAccessKeyId

The AWS Access Key Id you provided does not exist in our records.

2 个答案:

答案 0 :(得分:0)

如果您使用YAML文件(settings.yml)和ENV变量进行配置,则必须使用以下语法

development:
  access_key_id: <%= ENV['S3_KEY'] %>
  secret_access_key: <%= ENV['S3_SECRET'] %> 

由于YAML文件可以理解ERB格式的代码,而ruby代码介于&lt;%和%&gt;之间

答案 1 :(得分:0)

最终我在另一个文件中有以下行:

# config/initializers/paperclip.rb
Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-northeast-1.amazonaws.com'

由于某种原因,这会覆盖development.rb

中的设置

对于遇到类似问题的人,以下问题排查提示可能会有所帮助:

  1. 正如@ Shrikant1712建议的那样,必须通过:s3_credentials选项将aws凭证作为文件路径或哈希传递给Paperclip。

  2. s3_host_name应该是一个REST API端点,可以找到here。中国地区的终点列为here