Ruby Rails + Michael Hartl 教程 + VPS = AWS 问题

Ruby on Rails + Michael Hartl tutorial + VPS = issues with AWS

我已经完成了 Michael Hartl 教程,我正在尝试使用 https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx-on-ubuntu-14-04 进行部署。不幸的是,我坚持使用 RAILS_ENV=production rake db:migrate 因为它会产生以下错误:

ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key

/home/me/simpleapp/config/initializers/carrier_wave.rb:3:in `block in <top (required)>'

/home/me/simpleapp/config/initializers/carrier_wave.rb:2:in `<top (required)>'

/home/me/simpleapp/config/environment.rb:5:in `<top (required)>

'

我什至复制了那些文件 1:1,但这个错误仍然存​​在。知道我该如何解决吗?我真的厌倦了尝试使用来自网络的不同解决方案来修复它。 谢谢

编辑:我正在添加我的 carrier_wave 文件:

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

根本问题是 Carrier Wave 期望填充您的 AWS 环境变量,但它们并未在您的生产环境中设置。

我建议你看看 dotenv gem 这样的东西,它可以找到 here。多个环境中的环境变量内务处理可能是一个真正的痛苦,因此它有助于拥有一个工具来促进。 Dotenv(以及类似的其他人)为此提供了更多的交钥匙方法。

请注意,最近推出的 secrets.yml for Rails secret management 是朝着正确方向迈出的重要一步,但仍然需要一些 code/know 如何操作利用。

无论如何,在管理任何带有机密的文件时要非常小心。至少,该文件应该在您的 .gitignore 中,这样您就不会泄露您的秘密。