画像って便利ですよね。
もうしゃべるより画像の方がわかりやすかったりするじゃないですか。
だからなんか作る時も
写真あげれるようにしたいですよね。
そんなわけで今回は
写真をあげられるようにして、
そんでもって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を追加
gem 'fog'
追記したら
bundle install
2.XXXXX_uploader.rbの編集
storage :fog
8行目前後にコメントアウトされているのでそいつのコメントアウトを外して、その上にstorage :fileかなんかがあるのでそれは削除。
3.carrierwave.rbの作成
config/initializers/carrierwave.rbとなるように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すれば見れるようになるはずなんで、泣かないでください。