所以,我正在运行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])
我做错了什么?我已经对密钥进行了双重和三重检查,甚至尝试生成新密钥。仍然会出现相同的错误。
请帮忙!
答案 0 :(得分:1)
<强>移植强>
在评论中进行讨论后,问题是迁移引用了Paperclip
,其中使用了S3
个设置。要修复迁移,OP必须从Paperclip
中删除config/application.rb
S3设置,以便继续迁移。
-
ENV Vars
ENV
变量略有不同
如果您尝试在application.rb
中设置它们,这很奇怪 - 就其本质而言,environment (ENV) variables意味着驻留在操作系统中 - 让您的应用可以访问它们。系统的其他部分。这只是另一个安全功能,可以帮助保持数据的安全性和安全性。模块化
你遇到的问题是在开发过程中设置ENV变量是关于将变量放在机器上,而Rake也不会加载它们除非它们在操作系统级别可用< / p>
您需要的解决方案是双重的:
-
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
无论哪种方式都可以解决您的问题!