AWS :: S3 ::错误:: InvalidAccessKeyId

时间:2014-06-12 00:05:36

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

所以,我正在运行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) ===============

我在相应的文件中包含了所有更新的密钥,如下所示:

配置/ aws.yml:

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

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults

初始化/ aws.rb

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

我做错了什么?我已经对密钥进行了双重和三重检查,甚至尝试生成新密钥。仍然会出现相同的错误。

请帮忙!

1 个答案:

答案 0 :(得分:1)

<强>移植

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

-

ENV Vars

ENV变量略有不同

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

你遇到的问题是在开发过程中设置ENV变量是关于将变量放在机器上,而Rake也不会加载它们除非它们在操作系统级别可用< / p>

您需要的解决方案是双重的:

-

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

来引用它

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