Railsで作成したアプリをHerokuでデプロイする手順
カリキュラムの指示に沿って、Herokuでアプリのデプロイをしたので、記録に残しておこうかと思います。
Herokuでデプロイする大まかな流れ
アカウントを作成
↓
Heroku CLIをインストール
↓
必要なgemをインストール
↓
masterブランチにcommit
↓
Heroku上に新規アプリを作成
↓
MySQLを使用できるように設定
↓
master.keyを環境変数に設定
↓
Herokuへpush
↓
Herokuでマイグレーション
デプロイ後にアプリを修正した場合は、masterブランチにマージしてからHerokuへpushすればOK
アカウントの作成
まずはアカウントを作成します。
MySQLを使用したい場合はクレジットカード情報の登録も必要みたいです。
Heroku CLIのインストール
Heroku CLIのインストールのため、以下のコマンドをターミナルで実行します。
% brew tap heroku/brew && brew install heroku // brew tapは公式以外のリポジトリをHomebrewに追加するコマンド % heroku --version heroku/7.40.0 darwin-x64 node-v12.16.2
バージョンが表示されたらインストール成功です。これでターミナルでHerokuの操作ができます。
続いてHerokuにログインします。以下のコマンドを実行し、先ほど登録したアカウントの情報を入力します。
% heroku login --interactive heroku: Enter your login credentials Email: test@test.com Password: ********* Logged in as test@test.com
Logged in ~ が表示されたら完了です。
rails_12factorのインストール
rails_12factorというgemをインストールします。
rails_12factorについてカリキュラムには、「静的アセットファイルやログの保存先をHeroku用に微調整してくれるGem」と書いていました。
ちょっと調べてrails_12factorのgithubなどを見てみた感じだと、「12factorに基づいて作られた、railsのアプリケーションを動かすのに必要なgem」らしいです。12factorというのは、Heroku創始者が考えるアプリケーションに必要な12の要素のことです。
きちんと理解するには前提知識が足りなすぎる気がするので、とりあえずはrailsのアプリをHerokuで動かすにはrails_12factorが必要、ということで。
gemfileに以下の記述を追加して、bundlerでインストールします。
group :production do gem 'rails_12factor' end
% bundle install
masterブランチにcommit
ターミナルからgithubのcommitができるらしいです。知らなかった。
% git add . % git commit -m "gem rails_12factorの追加"
git add
はインデックスに追加するためのコマンドで、git add .
とすることで全てのファイルをまとめて追加できます。その後にcommitします。
Herokuに新規アプリケーションを作成
いよいよHeroku上に新規アプリを作成します。
ターミナルで以下のコマンドを実行します。
% heroku create test_app Creating app... done, ⬢ test_app https://test_app.herokuapp.com/ | https://git.heroku.com/test_app.git % git config --list | grep heroku
fatal: not in a git directory
が出なければ成功です。
MySQLを使用できるように設定
HerokuではデフォルトでPostgreSQLというデータベースを使用する設定になっているので、アプリでMySQLを使用する場合、設定の変更が必要です。
MySQLの使用には、ClearDBアドオンを追加する必要があります。
(アドオンというのはソフトウェアに後から追加できる拡張機能のこと)
以下のコマンドを実行します。
% heroku addons:add cleardb Creating cleardb on ⬢ test_app... free Created cleardb-vertical-00000 as CLEARDB_DATABASE_URL Use heroku addons:docs cleardb to view documentation
続いてMySQLのバージョンを、アプリで使用しているgemに合わせます。
まずは以下のコマンドを実行します。
% heroku config | grep CLEARDB_DATABASE_URL CLEARDB_DATABASE_URL: mysql://000000000000:1aaa0000@us-cdbr-east-06.cleardb.net/heroku_aaa00000000?reconnect=true
今回はURLのはじめにあるmysqlの部分をmysql2に変更します。URLの部分をコピぺして、mysqlの後ろに2を加えてから、以下のコマンドを実行します。
% heroku config:set DATABASE_URL='mysql2://000000000000:1aaa0000@us-cdbr-east-06.cleardb.net/heroku_aaa00000000?reconnect=true' Setting DATABASE_URL and restarting ⬢ test_app... done, v5 DATABASE_URL: mysql2://000000000000:1aaa0000@us-cdbr-east-06.cleardb.net/heroku_aaa00000000?reconnect=true
master.keyを環境変数に設定
アプリには外部に漏れてはいけない情報があり、それらは暗号化されてcredentials.yml.enc
というファイルに入っています。そして、対になるmaster.key
ファイルが存在する時のみ複号されます。故に、master.key
は非常に重要なファイルなのです。そのためmaster.key
はGitでは管理されず、環境変数に設定してどこからでもアクセスできるようにする必要があります。
(この辺りは理解が怪しいのですが、環境変数に設定することで、使用はできるけどファイルの中身は見せないし勝手に変更もさせないよ、ってことなのかな?)
以下のコマンドを実行して、Heroku上で環境変数を設定します。
% heroku config:set RAILS_MASTER_KEY=`cat config/master.key` % heroku config
環境変数の一覧が表示されるので、RAILS_MASTER_KEYが出てこれば成功です。
Herokuへpush
ついにアプリの情報をHerokuにpushします。
% git push heroku master
Herokuでマイグレーション
Heroku上でマイグレーションを行いデータベースを作成します。
頭にheroku run
をつけることでrailsのコマンドをHeroku上で実行できます。
% heroku run rails db:migrate
これでデプロイ完了です!
おまけ
デプロイしたアプリの情報は以下のコマンドで確認できます。
% heroku apps:info
エラーなどのログを確認したいときはこちら。
heroku logs --tail --app test_app