缺少必需的参数:ras测试中的aws_access_key_id,aws_secret_access_key

我正在做hartle教程的第11章。 当我运行heroku run rake db:migrate我收到此错误:

 Missing required arguments: aws_access_key_id, aws_secret_access_key 

我在这里输入链接描述的答案解决了它并成功迁移。但是现在当我运行时

 bundle exec rake test 

它给了我:

 rake aborted! ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key 

这是我的carrierwave文件:

 CarrierWave.configure do |config| config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['S3_KEY'], :aws_secret_access_key => ENV['S3_SECRET'], :region => ENV['S3_REGION'], :endpoint => ENV['S3_ENDPOINT'] } if Rails.env.test? || Rails.env.development? config.storage = :file config.enable_processing = false config.root = "#{Rails.root}/tmp/uploads/#{DateTime.now.to_f}.#{rand(999)}.#{rand(999)}" else config.storage = :fog end config.cache_dir = "#{Rails.root}/tmp/uploads/#{DateTime.now.to_f}.#{rand(999)}.#{rand(999)}" config.fog_directory = ENV['S3_BUCKET_NAME'] config.fog_public = false config.fog_attributes = {} end 

我在这里输入链接描述测试了答案,但它对我不起作用。

我会在测试助手中设置这些:

 ENV['S3_KEY'] = 'S3_KEY' ENV['S3_SECRET'] = 'S3_SECRET' ENV['S3_REGION'] = 'S3_REGION' ENV['S3_ENDPOINT'] = 'S3_ENDPOINT' 

或者,你可以这样做

 if ! Rails.env.test? config.fog_credentials = { :provider => 'AWS', :aws_access_key_id => ENV['S3_KEY'], :aws_secret_access_key => ENV['S3_SECRET'], :region => ENV['S3_REGION'], :endpoint => ENV['S3_ENDPOINT'] } end 

但我认为第一个更好,因为它不会用测试代码污染您的生产代码。