tl;dr
###1. herokuではmigration fileは日付順にmigrateされるため、外部キーを設定したmigration fileがある場合は、migrateの順番を考慮する。
###2. heroku logsより詳細な情報が欲しいならheroku run rails c
を使う
#環境
ruby 2.6.5
rails 5.1.6.2
heroku/7.39.0 linux-x64 node-v12.13.0
#問題1
heroku run rails db:migrate
を行うと以下のようなエラーが発生した
PG::UndefinedTable: ERROR: relation "test_types" does not exist
: CREATE TABLE "param_values" ("id" bigserial primary key, "name" character varying, "test_type_id" bigint, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, CONSTRAINT "fk_rails_j74mou9ds5"
FOREIGN KEY ("test_type_id")
REFERENCES "test_types" ("id")
)
#原因
親(参照元)のテーブルが作成される前に子のテーブルが作成されているから
#対処
手動でmigration fileの名前を変更することで
migrationの順序を変更した。
//[timestamp]ではなく番号を割り振った
[timestamp]_create_test_types.rb
↓
01_create_test_types.rb
#問題2
Herokuへのデプロイ後にサイトを開くとApplication errorのエラー画面が表示された
#原因
heroku logs
をしてみると
at=error code=H10 desc="App crashed"
と出力された。
さらに、heroku run rails c
をすると、
新規に追加したテーブルのカラム名のタイポが原因であることが分かった。
#対処
タイポを修正し、再びgit push heroku
する
#参考文献
[PG::UndefinedTable: ERROR: relation "XXXXXX" does not exist] への対応
[Ruby on Rails Tutorial]Herokuにデプロイ後Application error[H10 (App crashed)]が発生した時の対処法