Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回はアプリケーションをherokuへデプロイする時に起きたエラーの解決方法をお話しします。
herokuとは?について詳しく知りたい方はサムライエンジニアのこの記事で確認してみてください。
簡単に復習すると、herokuはアプリを実行環境に設置しておくサーバーです。サーバーにデプロイ(アップロード)するときにエラーが多数発生しましたので、その解決方法を共有してみます。
はじめに
herokuにアプリをデプロイして、失敗すると以下の画像のようにエラー画面が出ます
解決方法とすると、このグレーの中のメッセージを解読してエラーの原因を修正していくことになります。
しかし、このエラーを見つけるための手間がとてもかかります。
その作業をChatGPTに見つけてもらうというのが今回の修正方法です。
こんな感じに修正します↓
最初のエラーはこちら
このようにグレーの中の下から半分くらいのメッセージをコミぺしてChatGPTに読み込ませます。
今回のエラーが何を出していたか探ります。
今回のエラーの中では画像の回答の通り、足りないものを追加して、最初のエラーを修正していきます。
コマンドにbundle lock --add-platform X86_64-linux
を入力して指示通りに修正していきます。
次のエラーを修正します
先ほどのコマンドを入力して、GitHubを更新してherokuが最新の更新を読み込む状態にします。(これはいつもの作業で行なっているSourceTreeからのプッシュ、コミット、マージ、プルを行なっています)
そして、アプリを再びデプロイします。
すると次のエラーメッセージが出てきます↓
herokuがというか、Rubyって本当に優秀だと思います。その理由はプログラムを構成しているフレームワークや、ファイル、gemなどのバージョンが正しくなかったり、依存関係が構築されないとエラーを出してくれるので、どこで何が間違っているかが判明します。
では上記の画像のエラーも修正していきます。
上記画像のように初歩的なエラーもちゃんと注意してくれます。GemfileにあってGemfileLockにはないということからbundle instal
をコマンで実行するようにメッセージが出ています。
これを行なって、再びherokuが最新版のアプリを読み込むようにGitHubを更新します。
次のエラーを修正します
すると上記のような画像のエラーメッセージがまた、出ましたので、同じように解決していきます↓
上記画像の中段あたりに。つまり、“config.load_defaults 6.0°に変更すると良いでしょう。
という文があります。これの修正を行います。
今回のアプリの場合、下の画像のようにマイグレーションファイルの3行目ActiveRecord: :Migration [6.0]
の[6.0]が[7.0]になっていたので、[6.0]に直しました。
他のマイグレーションファイルも同じ状況になっていないかチェックして、[6.0]に戻します。
この原因はおそらく、コマンド入力でバージョンを更新してしまった際に[7.0]になってしまったのだと思います。RubyやRailsのバージョンと互換性がなかったのが原因かと思われます。
それでは更新して、デプロイします。
また、エラーです
すると以下のように返答が返ってきます。
回答の最後の方を確認します。
φ(・・) メモ
ユーザーモデルはある。でもエラーが出ているので、その点を質問します↓
同じように、Userモデルが存在するかどうか確認してみてください。もし存在しなければ、作成する必要があります。また、User・モデルが存在する場合、その名前が正しいか (大文字と小文字を含む)確認してみてください。
はい!エラーを起こしていた原因が分かりました。ユーザーモデルの中に以下の画像のように
has_many informations, dependent: :destroy
という存在しないモデルを定義していました。このモデルがユーザーモデルと関連しているようにコードを書いていましたので、コメントアウトしました。(14行目)
GitHubを更新してデプロイ。。。。エラー!!!
次のエラーを修正します
こんなエラーが出ています。しかし、エラーの原因は表示されていないようですが、しっかりコピペしてあるので、ChatGPTがエラーの原因を見つけ出してくれているはずです。
はい。エラーの原因が見つかりました。
どうやら、ApplicationRecord
に誤りがあるようです。
ここはちょっとズルをして、過去に作ったアプリのコードを確認します。すると以下のように記述してあることが判明します。
上記のように書くところを以下のように書いていました。
それで、意味が分からないままでは次にエラーと遭遇しても解決できないと思ったので、どんな意味を持つコードなのかChatGPTに聞いてみました。
上記のように
self.abstract.class= trueは、ApplicationRecordのインスタンスを作成しないようにRailsに指示します。つまり、このクラス自体がデータベースのテーブルと直接対応しないことを意味します。
とあるので、このself.abstract.class= trueという一文は正しく動作させるための定型文(おまじない)みたいなものだと判断し、次に進ことにしました。
そして、GitHubを更新してherokuにデプロイ!!
すると、以下のようにデプロイができました🎊↓
上記の画像をよく見るとApplication errorと書いてあります。
デイトラの教材だと、このあとアプリケーションのシークレットキーやAmazon S3との連携をさせるとアプリケーションが問題なく表示されるようになります。
取り急ぎherokuへのデプロイをした時に起きたエラーメッセージを修正してみました。
最後に
このように、herokuのエラーメッセージはどこにエラーの原因が書かれているか分かりずらいです。
しかし、ChatGPTに大事そうな部分を読み込ませると解決手段を提案してくれます。
koregaChatGPT3.5でも可能かどうかは分かりませんが、4.0だとこのように解決できます。
Twitterでも開発の様子をコンパクトに垂れ流しているので、よろしければ覗きにきてください😃
一昨日から粘っていたherokuへのデプロイの時のエラーが解決しました🎊
— クレイフィールド/Webエンジニアの🥚/リベシティ民 (@clayfild4works) June 17, 2023
とはいえ、ChatGPTに聞いて何回も手直ししてました。
そのプロセスをまとめます↓
まずはこんなエラーでした。
GemfileLockを直せと言われて、直し...
【続く】#プログラミング #朝活 pic.twitter.com/WBUq4vWOGf
いかがでしたでしょうか?
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。