Railsで作成したアプリをHerokuでデプロイする手順

f:id:endoakak:20200727195747j:plain

カリキュラムの指示に沿って、Herokuでアプリのデプロイをしたので、記録に残しておこうかと思います。

Herokuでデプロイする大まかな流れ

アカウントを作成

Heroku CLIをインストール

必要なgemをインストール

masterブランチにcommit

Heroku上に新規アプリを作成

MySQLを使用できるように設定

master.keyを環境変数に設定

Herokuへpush

Herokuでマイグレーション

デプロイ後にアプリを修正した場合は、masterブランチにマージしてからHerokuへpushすればOK

アカウントの作成

まずはアカウントを作成します。
MySQLを使用したい場合はクレジットカード情報の登録も必要みたいです。

signup.heroku.com

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