先日、amazon ec2上にnginx + unicorn + capistranoを用いてデプロイを行ったのですが、carrierwave + fog + s3での画像アップロードでエラーが出てしまっています。ローカルでは問題なくアップロードされているのですがproduction環境ではなぜかうまくいっていません。
###発生している問題・エラーメッセージ
crrent/log/prodution.rb Excon::Error::BadRequest (Expected(200) <=> Actual(400 Bad Request) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AuthorizationHeaderMalformed</Code><Message>The authorization header is malformed; a non-empty Access Key (AKID) must be provided in the credential.</Message><RequestId>XXXXXXX</RequestId><HostId>XXXXXXXXXXXXXXXXXXXXXXXX=</HostId></Error>" :cookies => [ ] :headers => { "Connection" => "close" "Content-Type" => "application/xml" "Date" => "Tue, 23 Aug 2016 10:00:24 GMT" "Server" => "AmazonS3" "x-amz-id-2" => "XXXXXXXXXXXXXXXXXX=" "x-amz-request-id" => "XXXXXXXXXXXXXXXXXX" } :host => "XXXXX.s3-ap-northeast-1.amazonaws.com" :local_address => "10.0.0.18" :local_port => 54106 :path => "/uploads/user/profile_image/1/__________2016-08-22_23.01.47.jpg" :port => 443 :reason_phrase => "Bad Request" :remote_ip => "XX.XXX.XX" :status => 400 :status_line => "HTTP/1.1 400 Bad Request\r\n" ): app/controllers/users_controller.rb:15:in `update'
The authorization header is malformed; a non-empty Access Key (AKID) must be provided in the credential.
###Carrierwaveのコード
initialize/carrierwave.rb CarrierWave.configure do |config| config.storage = :fog config.fog_credentials = { provider: 'AWS', aws_access_key_id: ENV['ACCESS_KEY_ID'], aws_secret_access_key: ENV['SECRET_ACCESS_KEY'], region: 'ap-northeast-1' } case Rails.env when 'production' config.fog_directory = 'XXXXX' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/XXXXX' when 'development' config.fog_directory = 'XXXX.dep' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/XXXX.dep' when 'test' config.fog_directory = 'XXXX.test' config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/XXXX.test' end end
###考えたこと
ローカル環境下ではdotenvと言うgemを使って.envファイルにアクセスキーなどを管理していました。おそらくですがデプロイしたアプリがs3にアクセスできずに出ているエラーかと思っています。このような状況でどのような対処をして良いのかいまいちよくわかりません。
###追記
# Rails4から分離したsettings.ymlの環境変数を .envファイルで管理する set :linked_files, %w{config/settings.yml .env}
このようにcapistranoのシンボリックリンク貼り付けでgit管理下おかないようにしています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。