2015-10-16 44 views
2

當我部署到Heroku的和運行heroku run rake db:migrate我得到的錯誤:Rails的Heroku的無效配置選項

ArgumentError: invalid configuration option `:aws_access_key_id' 

配置/初始化/ aws.rb

if Rails.env.production? 
    S3Client = Aws::S3::Client.new(
    aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    aws_region: 'us-east-1' 
) 
end 

配置/初始化/ carrierwave.rb

if Rails.env.production? 
    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'], 
     region: 'us-east-1' 
    } 
    config.fog_directory = ENV['S3_BUCKET'] 
    end 
end 

爲什麼我得到`invalid configuration option'錯誤?

編輯

新的配置/初始化/ carrierwave.rb文件:

if Rails.env.production? 
    CarrierWave.configure do |config| 
    config.fog_credentials = { 
     provider:    'AWS', 
     access_key_id:   ENV['AWS_ACCESS_KEY_ID'], 
     secret_access_key:  ENV['AWS_SECRET_ACCESS_KEY'], 
     region:     'us-east-1', 
     aws_access_key_id:  ENV['AWS_ACCESS_KEY_ID'], 
     aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
     aws_region:    'us-east-1' 
    } 
    config.fog_directory  = ENV['S3_BUCKET'] 
    #config.fog_attributes = {:signature_version => :v4} 
    end 
end 

配置/初始化/ aws.rb現在是空的。

這已修復了invalid configuration option問題。但是,當我運行RAILS_ENV=production bundle exec rake assets:precompile時,它被替換爲錯誤Missing required arguments: aws_access_key_id, aws_secret_access_key

更令人困惑的是,我在上述更改後成功運行了RAILS_ENV=production bundle exec rake assets:precompile,但它突然停止工作。

+0

你在heroku或者你自己的機器上運行預編譯嗎? – max

+0

我自己的機器。我認爲。我只需在命令行輸入'RAILS_ENV = production bundle exec rake assets:precompile'。 – Bazley

+0

在這種情況下,您需要在本地機器上設置ENV變量。我通常使用dotenv。我也讓Heroku編譯資產。 – max

回答

2

創建Aws::S3::Client時的選項不以aws_開頭。那隻會是愚蠢的。

if Rails.env.production? 
    S3Client = Aws::S3::Client.new(
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    region: 'us-east-1' 
) 
end 

但是你實際上並不需要通過憑證選項:

Default credentials are loaded automatically from the following locations:

  • ENV['AWS_ACCESS_KEY_ID'] and ENV['AWS_SECRET_ACCESS_KEY']
+0

這解決了原始的無效配置選項問題。但是,執行'RAILS_ENV = production bundle exec rake assets:precompile'會給出錯誤消息'Missing required arguments:aws_access_key_id,aws_secret_access_key'。但'heroku config'顯示它們存在。這是怎麼回事?? – Bazley

+0

它是導致錯誤的AWS客戶端或CarrierWave? – max

+0

愚蠢!在載波中我有同樣的錯誤。謝謝。 – Bazley