やったこと
Ruby on Railsで作成した自作アプリをHerokuでデプロイしました。
デプロイする上で多様な情報に埋もれてかなり詰まったので、その方法・手順を整理していきます!
開発環境
- macOS Monterey
- Ruby 3.1.2
- Ruby on Rails 7.0.4
- Heroku
- MySQL 8.0
- GitHub
デプロイの手順
- Rails上のファイルの設定
- Herokuの登録・設定
- (WIP)追加の設定(SSL, Redis, credentials, ActiveStorage)
1. Rails上のファイルの設定
-
config/database.ymlについては、
DATABASE_URL
という環境変数をHeroku上で後に設定すればそれ以外の環境変数は不要。(参考)config/database.ymlproduction: <<: *default
-
config/environments/production.rbはデフォルトのままでOK。(参考)
-
Procfileの作成(参考)
サーバープロセスのブート方法を明記。Procfileweb: bin/rails server -p $PORT -e $RAILS_ENV worker: bundle exec sidekiq
-
上記の変更をgitにコミットしておく。
2. Herokuの登録・設定
-
こちらからHerokuのアカウント作成
-
Heroku CLIをインストール
$ brew tap heroku/brew && brew install heroku
-
Herokuにログイン( → herokuコマンドが使える状態に)
$ heroku login
-
Heroku上でアプリを作成。ソースコードをHerokuが受け取れるようになる。
heroku
というリモートリポジトリが追加される。<アプリ名>
には自身のアプリの名前を入れる。(ただし重複不可)$ heroku apps:create <アプリ名>
-
本番環境でMySQLを使うためにJawsDBアドオンを追加。
<プラン名>
には現時点で無料プランのkitefin
を入れた。
(JawsDBを使う理由、MySQLのバージョン指定方法)heroku addons:create jawsdb:<プラン名> -a <アプリ名> --version=8.0
-
Heroku上で環境変数を設定(参考)
① JawsDBのURLを確認$ heroku config === karoyaka Config Vars JAWSDB_URL: mysql://<ユーザー名>:<パスワード>@<ホスト>:<ポート番号>/<データベース名>
② 確認したURLを、環境変数として設定していく。
mysql2
gemを使用しているため、DATABASE_URL
ではmysql2://
スキーマを使う。(参考)$ heroku config:set DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト>/<データベース名>?reconnect=true'
-
Heroku上へデプロイ。
main
ブランチ以外からのプッシュ時は、<現在のブランチ名>:main
と書けばOK。今後も、ソースコードの変更のたびにこのコマンドを打つ。$ git push heroku main
-
データベースのマイグレーション
$ heroku run rails db:migrate
-
画像プロセッサVipsを動かすのに必要なライブラリをインストール。インストール理由は、画像サイズの操作のために
variant
メソッドを使っているため。(参考①、参考②)$ heroku stack:set heroku-20 # ビルドパックの対象内のstackに変更 $ heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt $ heroku buildpacks:add --index 2 https://github.com/brandoncc/heroku-buildpack-vips $ cat <<EOF >Aptfile > libglib2.0-0 > libglib2.0-dev > libpoppler-glib8 > EOF
→ コミット & デプロイ
-
アプリを開く !! 🥳
$ heroku open
3. (WIP)追加の設定
※ 作業途中。これから設定していきます。
-
config/initializers/sessions_store.rb ?
-
config/environments/production.rbファイルで、config.force_ssl = trueを追加し、HTTPSを強制するように
-
ActiveStorageをS3に設定