当我rake db:migrate时,会出现ArgumentError

时间:2014-12-17 13:40:22

标签: ruby-on-rails

我想从远程提交启动我的项目,因此,在下载zipfile并放回所有.gitignore文件后,当我尝试使用db:migrate时,我收到此错误。

ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
2.1.5/gems/fog-core-1.25.0/lib/fog/core/service.rb:234:in `validate_options'
2.1.5/gems/fog-core-1.25.0/lib/fog/core/service.rb:258:in `handle_settings'
/s/ruby-2.1.5/gems/fog-core-1.25.0/lib/fog/core/service.rb:98:in `new'
/gems/fog-core-1.25.0/lib/fog/storage.rb:25:in `new'
gems/carrierwave-carrierwave/uploader/configuration.rb:83:in `eager_load_fog'
//.rvm/gems/ruby-2.1.5/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in     `fog_credentials='
/bloccit/config/initializers/fog.rb:2:in `block in <top (required)>'
e/.rvm/gems/ruby-2.1.5/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'

所以,我知道我的fog.rb文件有问题,但我该如何解决呢?哪里是放置AWS代码值的好地方?

我的fog.rb

CarrierWave.configure do |config|
    config.fog_credentials = {
    provider:               'AWS',
    aws_access_key_id:      ENV['AWS_ACCESS_KEY_ID'],
    aws_secret_access_key:  ENV['AWS_SECRET_ACCESS_KEY']
}
config.fog_directory   = ENV['AWS_BUCKET']
config.fog_public      = true
end

2 个答案:

答案 0 :(得分:3)

您可以将值放在配置中的yml文件中,按环境分隔部分 - 就像在config / database.yml中完成的那样。当应用程序启动时,您当然需要加载文件。并且建议不提交此文件。

或者,您可以在应用中创建.env文件。看看https://github.com/bkeepers/dotenv

要快速修复,您可以使用rake任务将值作为环境变量发送。

AWS_ACCESS_KEY_ID=123 AWS_SECRET_ACCESS_KEY=abc rake db:migrate

答案 1 :(得分:0)

通过以下两种方式可以消除此错误。错误是因为您的系统中没有可用的环境变量。

如果您有ENV['AWS_ACCESS_KEY_ID']和其他环境变量,请在for.rb中将其作为字符串传递。

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:               'AWS',
    aws_access_key_id:      'xxxxxxxx',
    aws_secret_access_key:  'xxxxxxxxxxx'
  }
  config.fog_directory   = 'xxxxxxx'
  config.fog_public      = true
end

如果您没有凭据或者您不想在开发模式下使用AWS空间,那么您可以使用文件系统来保存图像。

storage :fog下的上传器文件中将storage :file更改为app/uploaders。无需其他更改。