【发布时间】:2016-03-17 10:00:17
【问题描述】:
我的堆栈是 Puma + Nginx + PostgreSQL,在 AWS EC2 上。我正在使用 Capistrano 3.4 部署 Rails 4.2.4 应用程序。我一直在黑暗中试图解决这个问题已经有一段时间了,所以我想看看我是否能得到一些帮助来阐明这个问题。这在概念上并不困难,我只是不知道为什么我尝试过的方法不起作用。
Capistrano 的输出是这样的:
...
DEBUG [f85d7a84] Command: cd /home/deploy/my_app/releases/20151210184710 && ( export RVM_BIN_PATH="~/.rvm/bin" aws_access_key_id="<MY_AWS_ACCESS_KEY_ID>" aws_secret_access_key="<MY_AWS_SECRET_ACCESS_KEY>" RAILS_ENV="production" ; ~/.rvm/bin/rvm default do bundle exec rake assets:precompile )
DEBUG [f85d7a84] RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
DEBUG [f85d7a84]
DEBUG [f85d7a84] you can ignore these warnings with 'rvm rvmrc warning ignore /home/deploy/my_app/releases/20151210184710/Gemfile'.
DEBUG [f85d7a84]
DEBUG [f85d7a84] To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.
DEBUG [f85d7a84]
DEBUG [f85d7a84]
DEBUG [f85d7a84]
DEBUG [f85d7a84] rake aborted!
DEBUG [f85d7a84]
DEBUG [f85d7a84] ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
...
请注意,在第一行中,有人尝试在 Bash 命令中设置所需的参数,但显然无法在 rake assets:precompile 中访问它们。所以我的问题是如何正确设置“必需参数”aws_access_key_id 和 aws_secret_access_key。
我尝试过的:
1) 在 config/deploy.rb 中设置它们(灵感来自 this)
为此,我使用了:
set :default_env, {
rvm_bin_path: '~/.rvm/bin',
'aws_access_key_id' => '<MY_AWS_ACCESS_KEY_ID>',
'aws_secret_access_key' => '<MY_AWS_SECRET_ACCESS_KEY>'
}
2) 在我的 EC2 服务器上的 shared/secrets.yml 中设置它们:(灵感来自 this)
aws_access_key_id: '<MY_AWS_ACCESS_KEY_ID>',
aws_secret_access_key: '<MY_AWS_SECRET_ACCESS_KEY>'
我在 config/deploy.rb 中链接到这些
set :linked_files, %w{config/database.yml config/application.yml secrets.yml}
目前这是我尝试在 config/initializers/carrierwave.rb 中输入键的方式:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
#:aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'], # I still get the same error when I use these two lines instead
#:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
:aws_access_key_id => Rails.application.secrets.aws_access_key_id,
:aws_secret_access_key => Rails.application.secrets.aws_secret_access_key
}
config.fog_directory = ENV['AWS_S3_BUCKET']
end
3) 在 config/application.yml 中设置它们(灵感来自this)
aws_access_key_id: "<MY_AWS_ACCESS_KEY_ID>"
aws_secret_access_key: "<MY_AWS_SECRET_ACCESS_KEY>"
那么为什么这些方法都不起作用呢?我在设置环境变量方面不是很有经验,更不用说在远程服务器上设置了,但我已经看到了这些似乎都可以工作的线程/博客文章。
感谢大家的帮助。随时提问或了解更多信息!
【问题讨论】:
-
您是否尝试过在链接中的答案中手动设置,例如 1) 或 2):stackoverflow.com/questions/33457422/…
-
1) 使用您创建的 IAM 配置文件中的值设置环境变量:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_DEFAULT_REGION。
-
2) 除了 1),您还可以创建 ~/.aws/credentials 文件。您可以在此处添加以下行: [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_default_region = region
-
如果你在 linux 上运行你的代码。您只需要在 shell 上执行 'export AWS_ACCESS_KEY_ID=value' 即可。为所有 3 个环境变量执行此操作
标签: ruby-on-rails amazon-ec2 capistrano