LoginSignup
3
0

More than 3 years have passed since last update.

Heroku上で、一部ページを開こうとするとStatus=500のエラー

Last updated at Posted at 2021-02-19

結論

Heroku上で、ユーザー一覧を開こうとするとStatus=500のエラーが出ましたので
以下の2つのコマンドを実行することでエラーを解決しました。

$ heroku run rails db:rollback

$ heroku run rails db:migrate

※heroku run rails db:rollbackは一度テーブルを差し戻すため、カラムに保存されているデータは削除されます。実行には注意ください。

バージョン

rubyのバージョン ruby-2.6.5
Railsのバージョン Rails:6.0.0

Status=500のエラーが起こるまでの経緯

エラーが起こる前の、Hrokuにデプロイを行ってからの作業はviewの調整でした。
viewの調整後、デプロイしHeroku上で、ユーザー一覧を開こうとすると以下のエラーが出ました。

image.png

localで確認すると、問題なく開かれました。

なのでlogを確認しました。

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

すると文末にstatus=500とのエラーが出ました。

そもそもstatus=500とは?

status=500はウェブサーバーに何らかの問題が発生しているという信号です。
具体的なエラーや根本原因が明確ではなく、複数の原因が考えられます。

エラー原因の仮定

普段からユーザーにアプリを使ってもらってレビューしてもらっているので
何かしらの形でユーザー情報が壊れてしまったのだと仮定しました。
(壊れる仕組みについてはまだ断定できていないです(怖))

行ったこと①

まず、一度ユーザーデータが壊れていると仮定しているので、heroku run rails db:migrate:resetで、DBのリセットとmigrateを同時に行い、migrationの中身をキレイにしようと思いました。

$ heroku run rails db:migrate:reset

しかし、以下のエラーが出ました。。。

〜省略〜

rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1

〜省略〜

拒否られましたね。

Rails6ではDBを破壊する系のコマンドを防止する機能があるため起こったと考えられます。

エラー通りに環境変数 DISABLE_DATABASE_ENVIRONMENT_CHECK=1指定すれば問題ないかと思うのですが、私は違う方法を取りました。

行ったこと②

DBの情報をリセットする方法として、heroku run rails db:rollbackを行えば良いのではないかと考えました。
heroku run rails db:rollbackは一度テーブルを差し戻すことができるためです。

実際に差し戻しdb:rollbackと更新db:migrateを行いました。

$ heroku run rails db:rollback STEP=○

※現在地を含めた○個前までなかったことにしてくれます。
つまり○+1個前のファイルまで実行された状態となります。

$ heroku run rails db:migrate

無事Heroku上でユーザー一覧を開くことができました。
ユーザー情報が壊れてしまう仕組みがあるかもしれないので、今後はその原因究明に努めます。

記事の紹介

前回もstatus=500のエラーが出てデバックした時の記事です。
よろしければご参考ください。

内容は全く違うエラーの内容となっております。
https://qiita.com/narimiya/items/39b896f2a1bee9db99d7

以上です。

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