Herokuにデプロイした時のエラーについての備忘録
Herokuにデプロイした際に出たエラーとその解決策について復習も兼ねて解説したいと思います。
まずgit push heroku master
をした後にheroku run rails db:migrate
をしてサイトにアクセスしたら以下のようなよく見るエラー文が表示されました。
そこでheroku logs --tail --app 【アプリケーション名】
でログを確認してみました。
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "posts" does not exist
確認した所、上記のエラーメッセージが見つかりましたので恐らくここが原因を示していると判断しました。
そこで調べてみたところどうやらHerokuではローカルではmigrationが普通に出来ていたとしても、Heroku上ではmigration fileは日付順にmigrateされるとのことでした。
ここでローカルのデータベースを確認してみます。
rails db:migrate:status
を実行
Status Migration ID Migration Name
--------------------------------------------------
up 20210118033907 Create posts
up 20210118044855 Devise create users
上記のようになっていたのでマイグレーションを実行すると、先にpostsテーブルが作られるがリレーションをしているusersテーブルがこの時点では作成されていないためエラーが出ていたみたいでした。
したがってusersテーブルを先に作られるようにする必要があります。
※注釈)リレーションをしているとは「userとpostモデルで1対多などを指定しているの意味」
なので、rails db:drop
をした後にマイグレーションファイルのdevise_create_usersの日付(= Migration ID:上記の画像の箇所)をpostsより早い日付になるように手動で修正します。
=>「ローカルのマイグレーションファイル名の日付箇所を修正する」
あとはrails db:create
してrails db:migrate
します。
※注意)rails db:dropしたらデータベースの中身は消えますので注意してください。
修正が完了したらもう一度ローカルのデータベースを確認します。
rails db:migrate:status
を実行
Status Migration ID Migration Name
--------------------------------------------------
up 20210117044855 Devise create users
up 20210118033907 Create posts
usersテーブルの日付が先になったのでこれでOKです。
あとはファイル編集の内容をローカルリポジトリのmain(master)ブランチに反映させます。
そして再度git push heroku master
を実行してheroku run rails db:migrate
を実行したところ、今度はエラーが出ないで無事にデータベースが作成されました!
これで無事にサイトが表示されました🎉
安心しました。
補足
補足でもう1つのエラーについても説明します。
サイトが無事に表示された後に自分の場合はゲストログイン機能があるのでボタンを押して実行した所、下記のようなエラーが出ました。
ようやくサイトが表示されてホッとしていた所であまり見たことのないエラーが出たのでビビリましたが、調べてみたところCookieを削除すれば直るとの情報を見つけました。
(調べたところ、どうやらRailsのCSRF保護によって発生したエラーらしいので、エラーというよりは仕様みたいです)
そこでChromeの設定からHerokuの自分のアプリケーション名のCookieを削除したら無事に直りました!
(Cookieの削除は各自のお使いのブラウザで行ってください)
良かったです🙌
参考サイト
Author And Source
この問題について(Herokuにデプロイした時のエラーについての備忘録), 我々は、より多くの情報をここで見つけました https://qiita.com/yosyosyoyoyo/items/f7720380006132451722著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .