我正在尝试使用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.
答案 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
。
对于遇到类似问题的人,以下问题排查提示可能会有所帮助: