質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

6735閲覧

production環境での画像アップロードができない(Amazon S3)

daikitakaya

総合スコア229

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

1グッド

0クリップ

投稿2016/08/23 10:35

編集2016/08/25 05:29

先日、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管理下おかないようにしています。

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ec2インスタンスを再起動したところキーの取得ができました。
シンボリックリンクシンボリックリンク貼り付けで.envファイルを貼り付けてから再起動するのを忘れていました。
1.ec2再起動
2.sudo service mysqld start #mysqldの起動(サーバー上)
3.bundle exec cap production deploy #unicorn再起動(ローカル)
4.sudo service nginx restart #nginx再起動(サーバー上)

aws上でdotenvを使うには(デプロイをnginx + unicorn + capistranoでしてること)
/var/www/myapp/sharedに.envファイルを作成
config/deploy.rb
set :linked_files, %w{.env}
を追記するとsharedにある.envファイルを/var/www/currentに貼り付けてくれます。

投稿2016/08/25 08:15

daikitakaya

総合スコア229

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問