【问题标题】:AWS::S3::Errors::InvalidAccessKeyIdAWS::S3::Errors::InvalidAccessKeyId
【发布时间】:2014-06-12 00:05:36
【问题描述】:

所以,我正在运行 rake db:drop db:create db:migrate db:seed 并且由于某种原因我收到以下错误:

AWS::S3::Errors::InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.

请记住,大多数迁移都会运行,但我似乎在迁移后直接收到错误:

 20140606122523 CreateActiveAdminComments: migrated (0.8930s) ===============

我在适当的文件中有所有更新的密钥,如下所示:

config/aws.yml:

defaults: &defaults
  access_key_id: '*key here*'
  secret_access_key: '*key here*'
  bucket_name: '*bucket name*'

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults

initializers/aws.rb

AWS.config(YAML.load_file(Rails.root.join("config/aws.yml"))[Rails.env])

我做错了什么?我已经两次和三次检查了密钥,甚至尝试生成新密钥.. 仍然遇到同样的错误。

请帮忙!

【问题讨论】:

  • 你能发布迁移的内容吗?为什么您会收到S3 的此错误 - 这不包含数据库,对吧?
  • 正确..迁移内容是标准的..这就是为什么这很奇怪。
  • 它没有引用 Paperclip 或任何其他需要 s3 的依赖项,是吗?
  • 其实你说的很对..是的。它有一行:“add_attachment :sliders, :image”
  • 啊。您是否尝试过取消设置 Paperclip S3 设置?所以迁移将起作用 - 然后我们可以对 S3 连接进行排序?

标签: ruby-on-rails ruby-on-rails-4 amazon-web-services amazon-s3


【解决方案1】:

迁移

在 cmets 中讨论后,问题是迁移引用了 Paperclip,它使用了 S3 设置。为了修复迁移,OP 必须从config/application.rb 中删除Paperclip S3 设置,以便继续进行迁移。

--

ENV 变量

ENV 变量略有不同

奇怪的是,您如何尝试将它们设置在 application.rb 中 - 就其性质而言,environment (ENV) variables 旨在驻留在操作系统中 - 使您的应用程序和系统的其他部分可以访问它们。这只是另一个有助于保持数据安全和模块化的安全功能

您在开发中设置 ENV vars 的问题是将变量放在机器上,而且 Rake 也不会加载它们除非它们在操作系统级别可用

您需要的解决方案有两个:

--

secrets.yml

Rails 4.1.0 引入了 secrets.yml 来帮助解决这个问题:

Rails 4.1 在 config 文件夹中生成一个新的 secrets.yml 文件。经过 默认情况下,此文件包含应用程序的 secret_key_base,但它 也可以用于存储其他秘密,例如访问密钥 外部 API。

#config/secrets.yml
If you upgrade to Rails 4.1, you'll get a `secrets.yml` file which will look like this:
# Be sure to restart your server when you modify this file.

# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!

# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rake secret` to generate a secure secret key.

# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.

development:
  secret_key_base: [a salt]

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

您可以将您的 API 密钥放在那里,然后使用 Rails.application.secrets.some_api_key 进行引用

--

费加罗

另一种同样有效的方法是使用figaro gem。这与secrets.yml 有点多余,但无论如何,它会创建一个application.yml,然后您可以使用直接ENV["setting"] var 引用它

无论哪种方式都可以解决您的问题!

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 2020-06-17
    • 2015-12-19
    • 1970-01-01
    • 2020-02-24
    • 2021-08-31
    • 2023-03-27
    • 2017-04-24
    • 2012-05-02
    相关资源
    最近更新 更多