我使用雾和载波。现在我只有在本地运行的简单上传器:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:region => 'us-west-1', # Change this for
}
config.fog_directory = "bucket-main"
end
但是现在我有一个问题,我应该在哪里保存我的密钥。
在 heroku 环境中,我可以像这样打印
$ heroku config:set S3_ACCESS_KEY=THERANDOMKEYYOUGOT
$ heroku config:set S3_SECRET_KEY=an0tHeRstRing0frAnDomjUnK
$ heroku config:set S3_REGION=us-west-2
$ heroku config:set S3_BUCKET=my-sample-app-bucket-20160126
但是我不知道在本地计算机上该怎么做。
我已经按照本教程 https://github.com/sifxtreme/rails-carrierwave-s3
并将我的密钥存储在我刚刚创建的config/secrets.yml file
中:
development: &defaults
S3_ACCESS_KEY: "AKHJJHHJHJJHHJHJDHJDDJDHJDHJDJHDRANDOMFQ"
S3_SECRET_KEY: "HfkdjgjkfjkgjkfjkRANDOM2JSJDKKJJKSSJDJKSKaN"
test:
<<: *defaults
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
<<: *defaults
但是 rails 的命令给了我这个错误: /home/jonstark/.rvm/gems/ruby-2.3.0@railstutorial_rails_4_0/gems/fog-core-1.35.0/lib/fog/core/service.rb:244:in "validate_options":缺少必需的参数:aws_access_key_id, aws_secret_access_key(参数错误)
那我该怎么办?
以我的secrets.yml
,我倾向于做的是:
# secrets.yml
local: &local
secret_key_base: 123abc
remote: &remote
secret_key_base: abc123
aws_secret_key: <%= ENV['AWS_SECRET_KEY'] %>
development:
<<: *local
test:
<<: *local
production:
<<: *remote
上面的文件应该是我倾向于做的事情的足够好的概念证明。这样,您可以将机密存储在环境变量中,而不必将它们提交到源代码管理中。我从不将它们提交到源代码管理中。
如果一个平台要求你将机密提交到源代码管理,那么它是一个具有一些糟糕软件架构的平台。体系结构应始终考虑安全性。
由于您使用的是开发环境,因此实际上不需要连接到 AWS S3,除非您在其上进行开发。理想情况下,为了帮助加快开发环境并避免阻塞服务器,您可以将文件保存到public
文件夹中,而不是 S3 上。
我解决了这个问题,将宝石"费加罗"添加到我的宝石文件中。