我使用雾和载波。现在我只有一个我在本地运行的简单上传器:
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 s命令给了我这个错误: /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(ArgumentError)
Soo我该怎么办?
答案 0 :(得分:0)
我解决了将gem'figaro'添加到我的gemfile中的问题。
答案 1 :(得分:0)
我的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上。