背景
第6版の第1章で、githubへのpushまではすんなり進んだのですが、herokuにデプロイする際にエラーが多発したため、主に備忘録用のエラー対処まとめです。
前提条件
railsやgemのバージョンなどは基本的に「22年7月26日時点の第6版」で指定されている通りです。
エラー解決に必要だった処理や対処のまとめ
本題です。
エラー対処は大きく「1.デプロイ自体が失敗するエラー」を解決した後、「2.アプリケーションエラーの原因となるエラー」を解決するという流れでした。
1.デプロイ自体が失敗するエラー
1.Failed to install gems via Bundler
bundlerのバージョンがローカルとherokuで異なっていると発生するエラーのようです。
このエラーが出た際、エラーメッセージを辿っていくと
remote: -----> Installing bundler 2.3.10
といったメッセージが出ていますが、これがherokuのbundlerのバージョンです。
Gemfile.lockファイルの一番下に記載されているローカルのbundlerのバージョンとエラーメッセージのバージョンが異なっている場合、
$ gem uninstall bundler
でローカルのbundlerを一度アンインストールし、
$ gem install bundler --version '2.3.10' #herokuと同じバージョンを指定
でバージョンを指定してbundlerを再インストール。
最後に、Gemfile.lockファイルを更新するために
$ rm gemfile.lock #Gemfile.lockファイルを削除
$ bundle lock --add-platform x86_64-linux #再生成
でファイルを削除、再生成します。
この後
$ bandle install --without ‘production’
すればエラーが解決できるはずです。
2.Precompiling assets failed
このエラーの原因はエラーメッセージに
psych::badalias: unknown alias: default
とあるように、psychというgemの解釈の方法がバージョン3系と4系で変わっていることでした。なので
gem 'psych', '~> 3.1'
とファイルの先頭に追加してやってbundle installすれば解決するはずです。
(※ちなみにrails 6.1.4以降ではこの問題は解決されているようです。)
(この二つを解決すると、とりあえずデプロイには成功するようになりました。)
2.アプリケーションエラーの原因となるエラー
1.Ruby Sass has reached end-of-life and should no longer be used.
sassというGemの寿命が来たことが原因のようです。
sass-railsのバージョンを6以降にすることで解決できます。
gem "sass-rails", "~> 6"
とsass-railsのバージョンを変更してやり、その後bundle installします。
2. H10appcrashed
デプロイには成功しているが、ビルドに失敗したと表示が出たため、
$ heroku logs --tail
でログを開いてみるとエラー表示。
さらに
$ heroku run concole
でコンソールを開こうとすると「H10appcrashed」のエラーメッセージ。
Ruby3.1で標準ライブラリからいくつかのライブラリが除外されたことが原因のため、rubyのバージョンを下げるか
gem 'net-imap'
gem 'net-pop'
gem 'net-smtp'
を手動で追加してbundle installしてやると解決しました。
まとめ
上記を一気に解決する場合、
# バージョンを3系に下げる
gem 'psych', '~> 3.1'
#ruby3.1と整合させるため
gem 'net-imap'
gem 'net-pop'
gem 'net-smtp'
をGemfileの先頭に追加して
gem "sass-rails", "~> 6"
と書き換え
$ gem uninstall bundler
$ gem install bundler --version '2.3.10' #herokuと同じバージョンを指定
$ rm gemfile.lock #Gemfile.lockファイルを削除
$ bundle lock --add-platform x86_64-linux #再生成
$ bandle install --without ‘production’
としてやります。
おまけ
heroku createで出たurlを踏んでも上手くページが表示されない
単純に間違えてgit push用のurlに飛んでいただけでした。
heroku createの際に生成されるもう一つのリンクが正しいurlです。
参考
https://logicoffee.hatenablog.com/entry/2018/09/04/160555
https://qiita.com/Bjp8kHYYPFq8MrI/items/90a9db03160f8d6f7e5c
https://qiita.com/kandalog/items/8fd20f79ecf73034795a
https://yumishin.com/heroku-push-error/#i
https://qiita.com/CoGee/items/2f509402dec47c820d32
https://s4na.hatenablog.com/entry/2021/02/22/004019
https://mophie-blog.com/2020/08/16/app-erro-in-heroku-h10-app-crashed/#toc2
https://qiita.com/li2003038/items/2d93b693fa5885c45276