※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
RailsからS3に画像をアップロードできるようにする
前回までで、環境変数の設定をした
AWS(S3)の事前準備はこちらを参考にしました
今回は、RailsからS3に画像をアップロードできるようにする
AWSの設定をする
Gemfileを開いて、aws-sdk-s3について書き加える
gem 'devise'
gem 'faker'
gem 'hamlit'
gem 'aws-sdk-s3', require: false
awsが用意してくれているGemで、簡単に画像がアップロードできるようになる
bundle install
config/environmennts/から、開発環境、本番環境、テスト環境、それぞれの環境を設定できる
まずproduction.rbを開く
config.active_storage.service = :local
現在、ファイルのアップロード先はlocal(自分のパソコン)となっている
awsに保存したいので「amazon」に修正する
config.active_storage.service = :amazon
development.rbでも「amazon」にしておく
config.active_storage.service = :amazon
「local」から「amazon」に、保存先が変更できているのか(動くのか)を、本番環境に行く前に確認するため
この記事の最後、「local」に戻す!
config/storage.ymlを開く
amazon(AWS)の場合の設定方法についてすでに書いてある!
コメントインして、AWSのバケット情報を確認しながら入力していく
amazon:
service: S3
access_key_id:
secret_access_key:
region: ap-northeast-1
bucket: blogapp-
access_key_id:
とsecret_access_key:
はAWS設定時にダウンロードしたもの- リージョン名とバケット名はAWSのS3画面を見ながらコピペする
access_key_id:
とsecret_access_key:
は誰にも見せちゃいけないもの
- コピペしたままの状態でコミットしないこと!
- 必ずこのあと.envファイルに移動すること!
設定後、一度サーバーを落としてサーバーを再起動する
再起動したときに、設定内容が読み込まれる
実際にアイキャッチやプロフィール画像をアップロードしてみる
アップロードした3枚が保存されている
きちんと動作できているので、access_key_id:
とsecret_access_key:
を.envファイルに書き換えていく
環境変数の設定
.envファイルに下記のように書く
AWS_ACCESS_KEY=●●●●
AWS_SECRET_KEY=●●●●
AWS_BUCKET_NAME=blogapp-●●●●
storage.ymlを書き換える
amazon:
service: S3
access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
region: ap-northeast-1
bucket: <%= ENV['AWS_BUCKET_NAME'] %>
ymlファイルにrubyのコードを埋め込むときは<%= %>で囲む
【前提】バケット名は機密情報ではない
でも、バケット名を環境変数で切り替えられるようにしておく
→ ステージング環境ではこっち、本番環境ではこっち、と環境ごとにバケットを変えることができる
本番環境とステージング環境でバケットを切り替えられるので便利
設定後、一度サーバーを落としてサーバーを再起動する
再起動したときに、環境変数の設定内容が読み込まれる
config/environmennts/development.rbを開く
「amazon」で動作検証できたので、開発環境は「local」に戻しておくこと
config.active_storage.service = :local
コミット対象から外れているか確認
Sourcetreeでコミット対象のファイルをしっかり確認
- 環境変数に書き換えられていること
- .envのファイルが外れていること
うっかりGitHubで公開しないように気をつける
#DAY26