LoginSignup
17
19

More than 5 years have passed since last update.

carrierwaveを使って画像をAWS S3にアップロードする。それをherokuにあげる一連のアレ

Last updated at Posted at 2017-02-19

画像って便利ですよね。
もうしゃべるより画像の方がわかりやすかったりするじゃないですか。
だからなんか作る時も
写真あげれるようにしたいですよね。

そんなわけで今回は
写真をあげられるようにして、
そんでもってherokuでも使えるように
アップロードする先をAWSのS3にしたいなと。

S3はお金がかかるんですけど
無料枠を超えなければ1年間は無料で使えます。
(アカウントを過去に作ってないことが前提になると思うので、無料で使うために他のメアドで登録するのもありですね。お金大事だからね。)

carrierwaveを使って
アプリ内に保存できるところまで進んでいる程で話を進めますから
まだそこまで進んでないかたは以下を参照してください。
CarrierWaveを使って画像をアップロードできるようにしてみる

さて、

先ずはこちらからAWSアカウントの作成をします。

右上のサインアップからアカウントを作成します(クレジットカードの登録が必須になります。)

セキュリティめっちゃ大事で
ググってもらえばわかりますが、自分の不注意で高額の請求が来ることもありますし、酢生ログインされるとまずいので2段階認証を設定しといた方がいいです。

AWSアカウント作ったらこれだけはやっとけ!IAMユーザーとAuthyを使ったMFAで2段階認証

めっちゃ簡単にできるので是非やってみてください。
生成されたアクセスキーやシークレットアクセスキーはCSVファイルをDLできるので保存しておきましょう。

・S3のバケットを作成
1.ログインしたら左上のサービスのボタンを押すと「ストレージ」の項目の中に「S3」ってのがあるのでクリック

2.次に青色の「バケットを作成」を選択

3.バスケット名はご自分の好きな名前に。リージョンはUSで、作成ボタンを押すとバケットの完成です。
ここからは実際にコードをいじっていくことになります。

コードを書いていく
1.gem fogを追加

gemfile
gem 'fog'

追記したら

ターミナル
bundle install

2.XXXXX_uploader.rbの編集

app/uploaders/XXX_uploader.rb
storage :fog

8行目前後にコメントアウトされているのでそいつのコメントアウトを外して、その上にstorage :fileかなんかがあるのでそれは削除。

3.carrierwave.rbの作成

config/initializers/carrierwave.rbとなるようにcarrierwave.rbを作成

config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: ENV['ACCESS_KEY_ID'],
    aws_secret_access_key: ENV['SECRET_ACCESS_KEY'],
    region: 'us-east-1'#リージョンをUS以外にしたかたはそのリージョンに変更
  }

    case Rails.env
    when 'development'
        config.fog_directory  = 'バケット名'
        config.asset_host = 'https://s3.amazonaws.com/バケット名'
    when 'production'
        config.fog_directory  = 'バケット名'
        config.asset_host = 'https://s3.amazonaws.com/バケット名'
    end
end

ACCESS_KEY_IDとSECRET_ACCESS_KEYは他の人にバレると超高額請求がきて人生が終了するのでターミナルに

ターミナル
echo export ACCESS_KEY_ID="" >> ~/.bash_profile

echo export SECRET_ACCESS_KEY="" >> ~/.bash_profile

source ~/.bash_profile

「""」の間にKEYをコピペしてください

これでローカルで試してみれば作成したバケットの中に画像がアップロードされるはずです。

最後。herokuにあげる

1.herokuにACCESS_KEY_IDとSECRET_ACCESS_KEYを設定

コードの中にKEYを書いていないので、herokuを使うときは先ほどやったのと同じようにherokuにも登録する必要がありあます

ターミナル
heroku config:set ACCESS_KEY_ID=""
heroku config:set SECRET_ACCESS_KEY=""

heroku loginでログインした状態でやるようにしてください。
「""」の間に各KEYを書きます。

あとは

ターミナル
git push heroku master

これでherokuでも画像をあげるとS3に保存されるはずなので試してみてください。

追記 2017/04/11

3のところでUSのリージョン(バージニア)の時の設定ですが例えば東京のリージョンを選んだ場合は
リージョンの設定を帰るのと同時にエンドポイントの変更も必要になります。
(*エンドポイントってのはconfig.asset_hostのとこのバケット名までのところのURL)
で、リージョンごとのエンドポイントは以下から見えます
http://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#s3_region
エンドポイントとリージョンを書き換えてセーブして
よっしゃこれで表示されるはずや!
再読込みをポチ。。。。。

でない。

ってなると思うのですが、
一旦、コントロール+cで閉じてもらって
もう一回rails sすれば見れるようになるはずなんで、泣かないでください。

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19