【问题标题】:Paperclip with S3 -- AWS::S3::Errors::InvalidAccessKeyId带有 S3 的回形针——AWS::S3::Errors::InvalidAccessKeyId
【发布时间】:2016-06-26 05:33:45
【问题描述】:

我正在尝试使用 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')

我的回形针配置如下

# 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.

【问题讨论】:

  • 你能在存储桶策略中查看权限吗?
  • 还有你把你的 ENV 变量放在哪里了

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


【解决方案1】:

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

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

因为 YAML 文件可以理解 ERB 格式的代码,而 ruby​​ 代码介于 之间

【讨论】:

    【解决方案2】:

    结果是我在另一个文件中有以下行:

    # 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 2018-07-06
      • 2019-12-18
      • 2020-06-17
      • 1970-01-01
      • 2012-04-15
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多