見出し画像

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からやりましょう。

開発が忙しくてなかなかキッチンカーアーティスト活動ができない!


いいなと思ったら応援しよう!