1
0

More than 3 years have passed since last update.

【Heroku】デプロイ→ページが表示されない→親子関係のテーブルが実行されていなかった→親から実行して解決

Posted at

 目次

  1. エラー内容
  2. 原因
  3. 解決方法
  4. 解決に至るまでの過程
  5. 参照

 エラー内容

herokuにデプロイして本番環境で動作確認しようとしたところ、トップページが表示されずエラー画面が表示された。

ここまでの操作は下記の通り。

  1.  git push heroku masterコマンドで変更点をherokuにpush
  2. heroku run rails db:migrateコマンドでheroku上でマイグレーションを実行
  3. 本番環境で動作確認しようとしたら下記エラー画面が表示された

Image from Gyazo

原因

最終的に辿り着いた原因は、親子関係のテーブルを子の方から実行しようとしていた為だった。

% heroku run rails db:migrate:status
Running rails db:migrate:status on ⬢ アプリ名... up, run.5884 (Free)

database: heroku_e31ab517f6045b0

 Status   Migration ID    Migration Name
--------------------------------------------------
D, [2021-08-16T09:07:05.261846 #4] DEBUG -- :    (2.8ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
   up     20210806082257  Devise create users
   up     20210809080251  Create items
   up     20210810015843  Create active storage tablesactive storage
  down    20210812105413  Create receiver addresses
  down    20210812105529  Create buyers

receiver addressesbuyersのアソシエーションは、
receiver address belongs to buyerかつbuyer has one receiver address

子テーブルのreceiver addressesを先にマイグレーションしていた為、外部キーのbuyer_idが存在しなかったことが原因。

解決方法

buyers テーブルをマイグレーションした後に、receiver addressesテーブル をマイグレーションすることで解決。

buyers テーブルをマイグレーション

% heroku run bundle exec rake db:migrate:up VERSION=20210812105529 


receiver addressesテーブル をマイグレーション

% heroku run bundle exec rake db:migrate:up VERSION=20210812105413


・マイグレーション成功

 % heroku run rails db:migrate:status
Running rails db:migrate:status on ⬢ アプリ名... up, run.3437 (Free)

database: heroku_e31ab517f6045b0

 Status   Migration ID    Migration Name
--------------------------------------------------
D, [2021-08-16T09:27:32.835956 #4] DEBUG -- :    (3.6ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
   up     20210806082257  Devise create users
   up     20210809080251  Create items
   up     20210810015843  Create active storage tablesactive storage
   up     20210812105413  Create receiver addresses
   up     20210812105529  Create buyers


解決に至るまでの過程

エラー画面

Image from Gyazo

「何かが間違っています。
もしあなたがアプリケーションのオーナーなら、より多くの情報を得るためにログを確認してください。」

の様な意味だと思います。

ログを確認

% heroku logs --tail --app アプリ名 コマンドをターミナルで実行しログを確認。

2021-08-16T08:37:14.547570+00:00 ...
request_id=6118eb52-8198-4ff6-8797-6efde06df1cc fwd="39.110.211.37"
 dyno=web.1 connect=1ms service=42ms status=500 bytes=1827 protocol=https

ログを辿ると status=500 と赤字で表示されていた。

HTTPステータスが500の場合、「サーバーサイドで何かしらのエラーが発生している」らしい。
ざっくりした内容にびっくり。

herokuへのデプロイ時にstatus=500になる場合をググってみた

ググってみたが、今回の問題に役立ちそうなサイトは見つけられず、、

一旦方針転換。

heroku run rails db:migrateコマンドでheroku上でマイグレーションを実行した時のログを辿ってみた

エラー文発見。

StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'heroku_e31ab517f6045b0.buyers' doesn't exist

buyerテーブルが存在していない、とのこと。
更に辿ると、、

Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'heroku_e31ab517f6045b0.buyers' doesn't exist

再びbuyerテーブルが存在していない、、とのこと。

Caused by:
Mysql2::Error: Table 'heroku_e31ab517f6045b0.buyers' doesn't exist

また出た。

Caused by:
Mysql2::Error: Cannot add foreign key constraint

何やら意味ありげなエラー文を発見。
「外部キーを加えられません」という様なエラーかなと推測して、エラー文をそのままググってみる。

これで解決策を発見した。

参照:
 db:migrateがうまくいかない Cannot add foreign key constraint 外部キーの制約がおかしいのか

質問者様、回答者様ありがとうございます。感謝です。

記事内で、親テーブルを先に作成しないと子テーブルの外部キーを作成できないよ、という内容が書いてあり、これじゃないか!?とピンときました。

再度heroku上のマイグレーションの実行状況を確認

% heroku run rails db:migrate:status
Running rails db:migrate:status on ⬢ アプリ名... up, run.5884 (Free)

database: heroku_e31ab517f6045b0

 Status   Migration ID    Migration Name
--------------------------------------------------
D, [2021-08-16T09:07:05.261846 #4] DEBUG -- :    (2.8ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
   up     20210806082257  Devise create users
   up     20210809080251  Create items
   up     20210810015843  Create active storage tablesactive storage
  down    20210812105413  Create receiver addresses
  down    20210812105529  Create buyers

やっぱり、子テーブルを先に作成しようとしていた。

ここまで分かったところで、上述の解決方法を実行し解決。すっきりした、、



ローカル環境では、問題なく実行できたけど、何でなんだろう。

実行後にモデルを色々いじったからかな?

参照

db:migrateがうまくいかない Cannot add foreign key constraint 外部キーの制約がおかしいのか

herokuにデプロイすると 『We're sorry, but something went wrong.If you are the application owner check the logs for more information.』が立ちはだかった。

【heroku】railsアプリのデプロイ決定版の記事見てもコケた箇所

[rails]herokuのデプロイエラーActionView::Template::Error (Mysql2::Error: Table --- doesn't exist):

ActionView::Template::Error (Mysql2::Error: Table'heroku_(テーブルの情報?)' doesn't exist):

Ruby on Raisで指定マイグレーション ファイルのみ実行する

[Ruby]ActiveRecord::StatementInvalid in UsersController#create を解消できません

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0