先日,Rails, Dockerでの開発時に画像の保存先をローカルからS3に変更した際の手順を記録した.
開発環境
WSL2 (ubuntu 18.04 LTS)
Docker
- Ruby (2.7.1)
- Rails (6.0.3)
画像をS3に保存する手順
Active Storageがインストールされており,S3バケット作成まで完了していることを想定
Active Storageのインストールは以下のコマンドでできる
terminal
docker-compose run コンテナ名 rails active_storage:install
docker-compose run コンテナ名 rails db:migrate
用意するもの
-
S3バケット情報
- バケット名
- リージョン
-
IAMユーザー情報
- アクセスキー
- シークレットアクセスキー
手順
1. root dirにて以下のコマンドを実行
terminal
docker exec -it コンテナID sh
/app # EDITOR=vi rails credentials:edit
コンテナIDは以下のコマンドで確認できる
terminal
docker ps
2. credentialsを編集
credentialsをターミナル上で編集する
awsは最初コメントアウトされているので外す (それに気付かずハマってしまいました)
aws:
access_key_id: 取得したアクセスキー
secret_access_key: 取得したシークレットアクセスキー
入力し保存する.
Esc→:wqでセーブして保存する.
:wq
3. config/storage.ymlの編集
regionとbucketを作成したものに書き換える.
config/storage.yml
amazon:
service: S3
access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
region: "リージョン"
bucket: "bucket名"
4. aws-sdk-s3というgemをインストールする
Gemfileを編集
Gemfile
gem 'aws-sdk-s3', require: false
Gemfileを書き換えたので,コンテナをbuildし直す.
terminal
docker-compose build コンテナ名
5. config/environments/development.rbでActive Storageの参照先を:localから:amazonへと変更
config/environments/development.rb
config.active_storage.service = :amazon
以上で,S3のバケットに画像が保存された.