HEROKUでアプリケーションを公開する

こんにちは!
今回は、アプリケーションのデプロイについて書いていきます。
デプロイとは、作成したアプリケーションをweb上で公開することです。
通常、デプロイには、サーバやOS、データベースなどを準備する必要があります。
HEROKUはこれらのデプロイに必要なものを準備してくれるサービスです。
そして、HEROKUはアプリケーションのソースコードを管理するためのサービスであるgithubと連携しているため、
githubを通じてアプリケーションをHEROKUに送るだけでデプロイすることができます。
しかも、基本無料!月の利用時間に制限があるため複数のアプリを常時稼働はできない、30分でスリープするため初期のアクセスに数十秒かかるなど制約もありますが、個人で試しに使う分には無料枠でも問題ありません。
なお、今回の記事ではgithubは導入ずみ、、アプリもできている、普段使用しているデータベースはMySQLという前提です。
(完全に個人の都合)

HEROKUの登録

まずは、HEROKUでユーザ登録をします。
HEROKU
右上の新規登録をクリックするとフォームが出てくるので入力します。

f:id:kojiprg:20200902181253p:plain
HEROKUのユーザ登録画面

入力したメールアドレスにリンクが送られてくるので、そこからパスワードの設定をしたら完了です。

クレジットカードの登録

HEROKUのデフォルトのデータベースはPostgreSQLという種類です。
データベースの種類を変更するためには、クレジットカード情報を登録しておく必要があります。
ユーザ登録とログインが完了すると、アプリの管理ページに飛ばされると思います。
そこで、右上の忍者みたいな人をクリックするとメニューが開くので、「Account settings」をクリックします。

f:id:kojiprg:20200902184947p:plain
クレジットカード登録画面へ移動する

設定画面に移動したら、「Billing」を選択すると一番上に「Billing Information」と出てくるので、ここからクレジットカードの登録をおこなってください。

f:id:kojiprg:20200902185421p:plain
ここからクレジットカード登録

HEROKU CLIの導入

続いて、ターミナルでHEROKU関連のコマンドを実行できるようにするために、HEROKU CLIを導入します。
ターミナルで以下のコマンドを実行するだけです。

brew tap heroku/brew && brew install heroku

導入が完了したら、

heroku -v

と入力して、herokuのバージョンが表示されれば成功です。

ターミナルからHEROKUへのログイン

heroku login

として、ターミナルからHEROKUへログインします。
この時、

heroku: Press any key to open up the browser to login or q to exit: 

と表示されるので、適当にキーを入力するとブラウザが立ち上がりログイン画面になります。
ログインをクリックして、ログイン情報を入力すると右の画面のようになるので、ブラウザは閉じてしまって大丈夫です。

f:id:kojiprg:20200902190810p:plainf:id:kojiprg:20200902190824p:plain
ログイン画面とログイン完了画面

ターミナルでは以下のように表示されて、ログインに成功したことがわかります。

›   Warning: If browser does not open, visit
 ›   https://cli-auth.heroku.com/auth/browser/***
heroku: Waiting for login...
Logging in... done
Logged in as me@example.com

ブラウザを開かずに、ターミナルでログイン情報を入力したい場合には、

heroku login -i

としてください。同様にメールアドレスと、パスワードを入力すればログインできます。

アプリのディレクトリに移動して、HEROKU上でアプリケーション作成

cdコマンドでデプロイしたいアプリケーションのディレクトリに移動したら、次のコマンドでHEROKU上にアプリケーションを作成します。

heroku create アプリ名

データベースをMySQLに変更する

HEROKUにはアドオンと呼ばれる追加機能が豊富に用意されています。
MySQLを使えるようにするには、clearDBのアドオンを追加します。

heroku addons:create cleardb:ignite

アドオンが追加できました。
次のコマンドで、データベースのurlを確認します。

heroku config | grep CLEARDB_DATABASE_URL

#こんなのが返ってきます
CLEARDB_DATABASE_URL => mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true

このurlをHEROKU上で設定することで、MySQLのデータベースが使用できるようになります。
gemでmysql2を使用している場合は、mysqlをmysql2に書き換えて設定してください。

heroku config:set DATABASE_URL='mysql://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true'

mysql2なら

heroku config:set DATABASE_URL='mysql2://adffdadf2341:adf4234@us-cdbr-east.cleardb.com/heroku_db?reconnect=true'

鍵の設定

もう少しで設定が完了です!
Railsでは外部に漏らしたくない情報を暗号化しています。
それを復号するためにmaster.keyというファイルがあるのですが、通常はgithubに上がらないようになっています。
そこで、このmaster.keyの中身を環境変数に入れておきます。
他にも、開発環境で設定した環境変数がある場合には、HEROKUでも設定しなおします。

heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

アプリケーションをgitからHEROKUへ

このコマンドを打てば、ローカルリポジトリのmasterブランチの内容がHEROKUへプッシュされます。
事前にcommitやpullを忘れないようにしましょう。

git push heroku master

データベースのマイグレーション

ついに、最後です!
あとはデータベースをマイグレーションしましょう。
通常のコマンドの前にheroku runをくっつけます。
これで、HEROKUにプッシュされたアプリケーションに対して、マイグレーションが実行されます。

heroku run rails db:migrate

できた〜!

アプリのurlを確認

デプロイしたアプリケーションのurlは次のコマンドで確認できます。

heroku apps:info

この一番下に、「Web URL」という項目があるので、そのurlにアクセスしてください。
デプロイしたアプリケーションがあるはずです。

アプリを更新したら。。。

今回は手動で更新する方法を紹介します。
と言っても、ターミナルからログインして、

git push heroku master

をするだけです。
データベースをいじっている場合は、マイグレーションも忘れずに実行してください。


最後までお付き合いいただき、ありがとうございました!