カクカクしかじか

技術的なアレコレ

HerokuにRailsアプリをデプロイするときにすること

はじめに

久々にHerokuにRailsアプリをデプロイしようとしたら、色々手順を忘れていたので備忘録として投稿します。

やること

1. Herokuにアプリを作る
2. Herokuにデプロイ
3. HerokuのDBをマイグレート
4. 表示確認

Herokuにアプリを作る

MacにHerokuのCLIツールが入ってない人はこちらをまず実行

$ brew tap heroku/brew && brew install heroku

CLIコマンドでHerokuアプリを作ります。
基本的な形式は「heroku create アプリ名」の形になります。

$ heroku create taskleafs
Creating ⬢ taskleafs... done
https://taskleafs.herokuapp.com/ | https://git.heroku.com/taskleafs.git

2. Herokuにデプロイ

$ git push heroku master
Counting objects: 272, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (250/250), done.
Writing objects: 100% (272/272), 47.07 KiB | 1.00 MiB/s, done.
Total 272 (delta 96), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote:  !     Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used.
remote:             Detected buildpacks: Ruby,Node.js
remote:             See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.5.1
remote: -----> Installing dependencies using bundler 1.15.2

<中略>

remote: Verifying deploy... done.
To https://git.heroku.com/taskleafs.git
 * [new branch]      master -> master

3. HerokuのDBをマイグレート

現時点ではHerokuのRailsアプリの本番DBがマイグレートされておらず、アプリを正常に起動することが出来ません。なので、ローカル同様にHerokuの本番DBもマイグレートします。

$ heroku run rails db:migrate
Running rails db:migrate on ⬢ taskleafs... up, run.7159 (Free)
D, [2019-04-14T06:22:09.656172 #4] DEBUG -- :    (55.1ms)  CREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)
D, [2019-04-14T06:22:09.703581 #4] DEBUG -- :    (40.1ms)  CREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
D, [2019-04-14T06:22:09.707422 #4] DEBUG -- :    (1.2ms)  SELECT pg_try_advisory_lock(8796728096074453815)
D, [2019-04-14T06:22:09.723056 #4] DEBUG -- :    (1.2ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
I, [2019-04-14T06:22:09.724373 #4]  INFO -- : Migrating to CreateTasks (20190223085137)
D, [2019-04-14T06:22:09.728453 #4] DEBUG -- :    (1.5ms)  BEGIN
== 20190223085137 CreateTasks: migrating ======================================
-- create_table(:tasks)
D, [2019-04-14T06:22:09.770748 #4] DEBUG -- :    (41.6ms)  CREATE TABLE "tasks" ("id" bigserial primary key, "name" character varying, "description" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
   -> 0.0423s
== 20190223085137 CreateTasks: migrated (0.0424s) =============================

D, [2019-04-14T06:22:09.776271 #4] DEBUG -- :   ActiveRecord::SchemaMigration Create (1.7ms)  INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"  [["version", "20190223085137"]]
D, [2019-04-14T06:22:09.778728 #4] DEBUG -- :    (2.2ms)  COMMIT
D, [2019-04-14T06:22:09.786493 #4] DEBUG -- :   ActiveRecord::InternalMetadata Load (0.9ms)  SELECT  "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2  [["key", "environment"], ["LIMIT", 1]]
D, [2019-04-14T06:22:09.793362 #4] DEBUG -- :    (0.7ms)  BEGIN
D, [2019-04-14T06:22:09.795318 #4] DEBUG -- :   ActiveRecord::InternalMetadata Create (1.0ms)  INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"  [["key", "environment"], ["value", "production"], ["created_at", "2019-04-14 06:22:09.793719"], ["updated_at", "2019-04-14 06:22:09.793719"]]
D, [2019-04-14T06:22:09.797004 #4] DEBUG -- :    (1.4ms)  COMMIT
D, [2019-04-14T06:22:09.797960 #4] DEBUG -- :    (0.8ms)  SELECT pg_advisory_unlock(8796728096074453815)

4. 表示確認

heroku openコマンドでコンソールからアプリを起動する

$ heroku open

image.png

最後に

仕事用のPCにHeroku CLIが入っていないことに気付き、Heroku CLIを入れるところから久々にやってみました。 普段の仕事ではHerokuをほとんど使わないので、色々と思い出すきっかけになってよかったです。 個人開発では積極的に触れていこうと思った次第。