経緯
多くの人はAWSのS3を用いるところだと思いますが、諸事情により登録できない状態だったため、FreeプランがあるCloudinaryを使用することにしました。
前提
本RailsアプリではActive Storageを使用しています。Active Storageの詳しい内容はこちらになります。
この記事はActive Storageでアプリを作っていることが前提です。
環境
Ruby:3.2.1
Rails:7.0.0
Docker
準備
Gemfileに以下の内容を追記し、コマンドを実行
gem 'activestorage-cloudinary-service' # Cloudinary と Active Storage の連携をする
gem 'cloudinary', require: true # Cloudinary
docker-compose run web bundle install
これでGemfileを更新が完了したので、Dockerをビルドしておきましょう
docker-compose build
続いて、ファイルをCloudinaryに保存する設定を行います。
Rails.application.configure do
config.active_storage.service = :cloudinary
end
local:
service: Disk
root: <%= Rails.root.join("storage") %>
cloudinary:
service: Cloudinary
cloud_name: <%= Rails.application.credentials.dig(:cloudinary, :cloud_name) %>
api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
こちらを参考にcloudinary.ymlをダウンロードし、config
ディレクトリ直下に配置し、以下のように書き換える。
development:
cloud_name: <%= Rails.application.credentials.dig(:cloudinary, :cloud_name) %>
api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
enhance_image_tag: true
static_file_support: false
production:
cloud_name: <%= Rails.application.credentials.dig(:cloudinary, :cloud_name) %>
api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
enhance_image_tag: true
static_file_support: false
test:
cloud_name: <%= Rails.application.credentials.dig(:cloudinary, :cloud_name) %>
api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
enhance_image_tag: true
static_file_support: false
Rails.application.credentials は、鍵の管理を行うために、Rails 5.2 から登場した機能です。
鍵の情報は、config/credentials_yml.enc に暗号化されて保存されています。
次のコマンドで編集をします。
docker-compose run -e EDITOR=vim web rails credentials:edit
編集画面では以下の内容を追記してください。
cloudinary:
cloud_name: (cloudinaryに付けた任意の名前)
api_key: (cloudinaryより指定された15桁の数字)
api_secret: (cloudinaryより指定された27桁の英数記号)
Herokuの準備
以下のコマンドでHerokuにログインし、アプリを作成します。
heroku login
heroku create 'アプリ名'
次のコマンドで必要なアドオンを追加します
heroku addons:create heroku-postgresql:mini
heroku addons:create cloudinary:starter
Herokuにアプリをプッシュし、master.keyの内容を登録します。
git push heroku main
heroku config:set RAILS_MASTER_KEY="++++++" #config/master.keyの中身
最後に、マイグレーションを実行し、必要ならばseed.rbを実行します。
heroku run rails db:migrate
heroku run rails db:seed
参考資料
Cloudinary + Rails 画像アップロード
Active Storageで複数画像をCloudinary に上げ Herokuに公開する