2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails/Heroku】push後のエラー解消手順

Last updated at Posted at 2020-11-01

状況

  • 開発環境でアプリケーションに追加実装 (コメント機能の実装)

  • デプロイ先のHerokuにpush

  • Heroku上アプリでコメントを投稿しようとしたところエラー

demo


環境

  • macOS Catalina 10.15.6

  • ruby 2.6.5

  • Rails 6.0.3.4

  • MySQL : 5.6.47


対処の手順

1. ターミナルでログを確認

Heroku上のアプリを操作した際は、ターミナルでコマンドを打つとログを確認できます。

terminal
% heroku logs --tail --app アプリ名

# --tailは最後の10行を表示するオプション

実行後、エラー箇所を抜粋したのがこちら。

demo


続いてエラー箇所を深ぼっていきます。


2. エラーを読み解く

先程の画像にエラーの理由が書かれています。

  1. Completed 500 Internal Server Error

  2. ActiveRecord::StatementInvalid (Mysql2::Error: Table 'heroku_***.comments' doesn't exist):


1ではエラーがサーバーサイドのエラーであることを示しています。
この'500'は「HTTPステータスコード」と呼ばれ、HTTP通信でのレスポンスの意味を表現します。
一部を紹介すると…

  • 200 : 正常なレスポンス

  • 302 : リダイレクトを実行

  • 404 : 存在しないURLへのリクエスト


2が今回のエラーを解決するためのヒントです。

  • ActiveRecord::StatementInvalid : Active Recordを使用した際に起きるエラー

  • Table '*** .comments' doesn't exist : commentsテーブルが存在しません


開発環境ではコメント機能は正常に動作し、Heroku上ではコメントを投稿しようとしたときにエラーが出ました。
そしてこのエラー文を見るに、以下のことがエラーの原因として考えられます。


Heroku上でコメントテーブルを作成していない


では、実際に解消してみましょう。


3. Heroku上のアプリでテーブルを作成

ターミナルで次のコマンドを実行します。

terminal
(Control + C でログ画面を抜けた後)

% heroku run rails db:migrate

これで無事にエラーが解消しました!


まとめ

  • Heroku上でエラーに対処するため、ターミナルでログを確認した

  • エラー文を確認し、原因を特定した

  • heroku run rails db:migrateでテーブルを作成した

  • エラーを無事に解決できた


エラーが出ると少なからず焦ります。特に本番環境でのエラーは別格の怖さがあります。

解決できるかと不安になりますが、いつだって大事なのは冷静に状況を整理すること。そして適切な対処を淡々と実行すること。

経験値を増やして、エラー対処職人になれるように積み上げていきます!

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?