はじめに
こんにちは、初めてアプリをHerokuでデプロイしようとした時に、いろんな壁にぶち当たったので、この記事はHerokuをデプロイするまでの手順とぶち当たった壁たちをまとめた記事になります。
Heroku初心者なので、理解せずにやっていることをお許しください。
ちなみにアプリはまだできてないです。AmazonのAPIを取得したかったのですが、そのためにはwebサイトのURLが必要だったので、先にデプロイをしなければならなくなっただけです。
長ったらしくなったらすみません。
環境
- Mac catalina
- Laravel:6
- PHP:7.3
- AWS Cloud9 EC2
バージョンを一応書きましたが、たぶん関係があるのはAWS Cloud9 EC2だけです。
Cloud9独特の問題もあったので、それ以外の開発環境の人にはあまり参考にならないかもです。
前提条件
PHP、Laravel、composerはすでに入ってるものとします。
手順
基本、公式ドキュメントの通りにしました。
1.Heroku CLI
2.Heroku(Laravel)
ぶち当たった壁たち
1.Heroku CLIをダウンロードの仕方がわからない
ここで小さな壁にぶち当たりました。公式ドキュメントにAWS Cloud9 EC2のダウンロードのコマンドが書かれてません。
なので、以下のQiitaの記事の通りにやったらできました。
https://qiita.com/zuumi/items/bd983a2890e9a2fa371b
2.ログインできない
ここで大きな壁にぶち当たりました。
それは、heroku login
がうまくいかないことです。
本来ならば、heroku login
をすると、
$heroku login
heroku: Press any key to open up the browser to login or q to exit
› Warning: If browser does not open, visit
› https://cli-auth.heroku.com/auth/browser/***
heroku: Waiting for login...
Logging in... done
Logged in as me@example.com
こんな感じでwebブラウザが立ち上がり、そこでログインをするっぽいのですが、Cloud9は自動でwebブラウザが立ち上がらず、Waiting for login...から先に進みません。
書かれているURLに飛んでも、ログイン画面は出てくるのですが、Loginボタンを押すと、IP address mismatchと表示され、ログインできません。
なので、
heroku login -i
もしくは
heroku login --interactive
にすることで解決するようです。
これをすることで、ターミナル上でHerokuに登録したEmailとPasswordを入力し、ログインすることができます。
しかし、あとでHerokuの方で二段階認証をするよう言われたので設定したのですが、Cloud9でログインすると、heroku login -i
をすると二段階認証を求められ、ブラウザは立ち上がらないしIP address mismatchって出てできないしで詰みました。なので二段階認証をなくしました。
これはまだ解決してないので、分かる方がいましたら教えてください。
3.ずっと403がでる
ログイン以降順調だったのですが、最後のheroku open
でブラウザに行っても403になり、画面が出てきませんでした。
この壁が大きすぎて、リアルに10時間くらい溶かしました。不毛ですね。
原因は、2つありました。
1.envとHerokuでAPP_KEYが違う
1つ目の原因がこれです。
403が出て、いろいろ調べて試しているうちに、おそらく何度もAPP_KEYを作成してしまったため、APP_KEYを記録する.envファイルとHeroknoの方で違うAPP_KEYを記録してしまっていました。
なので、両方のAPP_KEYを同じにすることで解決しました。
まず、vim .env
をし、
APP_KEY=値
のところの値をコピーします。
次に、Heroku>アプリをクリック>Settings>Reveal Config Vars>APP_KEYの右の欄に.envのAPP_KEYの値をペーストします。
これで解決しました。
2.ブランチが違う
しかし、私のブラウザはまだ403です。
またいろいろ調べました。その結果、Herokuへプッシュする'git push heroku ブランチ名'のブランチ名のところをmain(master)ブランチではなく、mainブランチから切ったブランチ名(トピックブランチ)を入れていました。
悪い例
git push heroku branch1
herokuにプッシュするブランチはmasterもしくはmainでなければならないようです。
私のデフォルトブランチはmainなので、切ったブランチをマージして'git push heroku main'とすることで、ようやく解決し、デプロイすることができました!!
エラーになりがちなこと
- Procfileに
web: vendor/bin/heroku-php-apache2 public/
を書き忘れる。
- 変更をした後add、commitしてない。
関係なかったこと
これは、壁にぶち当たった時に色々調べてやってみたけど、終わってみれば関係なかったのかなってことです。実際関係なかったかはわかりませんが、元に戻しても正常に動いたので、このデプロイでは関係なかったのかなと思います。
まあ、いつか役に立つ日が来るのかもしれないと信じ、メモしておきます。
Requestファイルの中身を変える
https://hpscript.com/blog/laravel5-7-403%E3%82%A8%E3%83%A9%E3%83%BC-forbidden/
このサイトを見ましたが、解決しませんでした。Herokuでもなかったので、目的のサイトではなかったのだと思います。
さいごに
初めてHerokuでデプロイするために、大量の時間を費やしましたが、勉強にはなったので完全に無駄ではなかったと思います。