1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Active StorageでCloudinaryに画像を上げ、Herokuに公開した話

Last updated at Posted at 2024-01-11

経緯

多くの人は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に保存する設定を行います。

config/environments/production.rb
Rails.application.configure do
  config.active_storage.service = :cloudinary
end
config/storage.yml
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ディレクトリ直下に配置し、以下のように書き換える。

config/cloudinary.yml
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に公開する

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?