はじめに
Docker によって Laravel 環境を構築し、Heroku にデプロイするこちらのチュートリアル記事
を参考にして取り組んでいたところ、Heroku での自動デプロイに失敗しました。
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255
上記のエラーは View build log で出てくるログの最後の方にあるエラー文の抜粋です。
この記事では初学者なりに格闘した内容を書きます。
単刀直入に言うと
PHP のバージョンが Heroku でサポートされているバージョンではなかった。
冒頭のサイトでは php:7.2-fpm ですが、2022年8月14日現在 PHP 8 以上が推奨されていました。
こちらのサイトで PHP の対応バージョンが記載されています。
一次情報は大事。
2022年8月14日現在
Heroku’s PHP support extends to applications using the latest available releases in the PHP 7.4, PHP 8.0 and PHP 8.1 series.
PHP 7.4 is in security-only maintenance mode and will be fully end-of-life at the end of 2022.
「PHP 7.4 は(中略)2022年末に完全にサポート終了」とのことで PHP 8 を使うことが推奨されています。
現在の PHP バージョンの確認方法
docker-compose を使ってる方は現在の PHP バージョンは
$ docker-compose exec app php --version
で確認できます。
PHP のバージョンを上げる方法
Dockerfile の記載を更新します。
FROM php:8.0-fpm
そのあとコンテナを更新します。
$ docker-compose up -d --build
-d はバックグラウンドで実行するオプション。
--build はすでに同じ image が build されていても省略せずに build を強制するオプションです。
解決?
私が当エラーに当たったときはエラー文のコピペ検索でこちらに行きつき、PHPのバージョンアップを行う前にこのページの対応をしました。もしかしたら、PHPバージョンアップの後にこのページの処置が必要になるかもしれません。
経緯
ここからは私と同じ状況に陥った方が、よりこの記事にたどり着きやすくなるように私がエラーに陥った経緯を説明します。
冒頭で紹介した記事を上から丁寧に追っていった際、デプロイ で失敗していたことに気づかずに素通りし、
APP_KEYの設定 の章で最初に躓きました。
$ heroku run php artisan key:generate --show -a <アプリ名>
$ heroku config:set APP_KEY='{ここに上記で生成されたAPP_KEY(base64から始まる文字列)をコピペ}' -a <アプリ名>
コマンドを実行しても、最初のコマンドで
bash: php: command not found
のエラーが出ました。この時点で Heroku の Build が失敗しています。
しかし web 検索で「.env に書かれている内容をコピペする」という対症療法を見つけ、その場はクリアしてしまいました。
その次のDBのマイグレーション・シーディングでも
heroku run php artisan migrate --seed -a <アプリ名>
同様のエラーでどうしてもマイグレーションが行えず、さきほどの Stackoverflow などを試していました。
まとめ
参考にする記事の古さの確認(界隈や分野によっては1年前の記事は全然古く感じないかもしれませんが)、1次情報を見ることの大切さ、バージョンの確認など基本のキを改めて叩きつけられたような思いです。少しでも同じような箇所でつまずいた方の力になれば幸いです。