HerokuでLaravel Passportを使おうとしてハマった話
自社サービスでユーザ認証をfirebaseとLaravel Passportで行なっています。ステージング環境を新規に構築した時に悲劇に見舞われました。
LogicException: Key path "file:///app/storage/oauth-private.key" does not exist or is not readable in /app/vendor/league/oauth2-server/src/CryptKey.php:48
こんなエラーが発生。oauth-private.keyが存在しないとのことです。Herokuは不慣れなのですが、どうもHerokuのサーバにコマンドラインでログインができるようなので、それでfileが存在するか確認することにしました。
以下のコマンドになります。
heroku run bash --app=Herokuで作成したアプリ名
ls storage/
でstorageフォルダのファイルを確認すると確かにoauth-private.keyがないです。
php artisan passport:keys
でoauth-private.keyを生成してくれたので、めでたしめでたし。
再度認証処理を実行します。
が。。。。
同じエラーでoauth-private.keyがないと言われて認証できません。
どう見てもファイルあるし、oauth-private.keyの権限を変えたり3時間ぐらい色々試してみました。
が。。。。
エラーが解消できない!
相当困りました。ググっても同じ症状はphp artisan passport:keysでoauth-private.keyを生成すれば治るとみんな言ってますし。
最終的には以下の記事の内容そのままで出来ました。
composer.jsonのscriptに
"post-install-cmd": [
"chmod -R 777 storage",
"php artisan passport:keys"
]
を追加するという内容でした。
composer install時にphp artisan passport:keysをするだけなので、今まで私がやったことと同じじゃん!と思ってたわけです。
これがHeroku素人たる罠でした!
Herokuのドキュメントにこんな言葉が隠されてました。
デプロイ後のアプリケーションの状態を調査するなどのデバッグの目的で、heroku run bash を使用して、完全なシェルを One-off dyno で実行することができます。ただし、この操作により、同時に実行されている可能性があるいずれかの Web dyno に接続されるわけではありません。
私が読み取った内容はheroku run bashで入ったサーバと実行しているサーバは別物だよ。あくまでデバック用だからね
という感じでしょうか。heroku run bashで入ったサーバのファイルをいじっていたのですが、アプリで接続しているサーバが違うので全く反映されてませんでした!
heroku run bashはあくまでデバック用なので、ソースやファイルの変更はgithubからやりましょう。
開発が忙しくてなかなかキッチンカーアーティスト活動ができない!