データベースにMYSQLを使う
HerokuではデータベースとしてPostgreSQLになっているため、アプリごとにClearDBを入れなければならない。利用にはクレジットカードが必要。(ClearDBの利用自体は無料)
$ heroku addons:add cleardb
上記にコマンドの入力またはHerokuのサイトのsettingタブから導入できる。
Procfile を作成する
ProcfileというHerokuの設定ファイルを作成。サーバーにApacheを使うこと、public/をドキュメントルートとすることを宣言するために使います。アプリフォルダの直下に作成する。
web: vendor/bin/heroku-php-apache2 public/
中身は上記のように。
環境変数の設定
どの項目を登録すべきかよくわからなかったためいろいろやってみたが注意すべきはDBに関する項目。
DB_DATABASE=[データベース名]
DB_HOST=[ホスト名]
DB_USERNAME=[ユーザー名]
DB_PASSWORD=[パスワード]
これらはenvファイルの設定ではなくclearDBの設定で、そのURL内にある。下記コマンドで表示。
heroku config:get CLEARDB_DATABASE_URL
#URLが表示される
mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
またセキュリティ関連のAPP_KEYの設定も必須。
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
envファイルのAPP_KEYの項目をartisanコマンドで取得
HerokuのMYSQLにmigrateする
自分はここに一番時間を取られた。マイグレーションがうまくいかない。
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
何度やってもこのエラーメッセージが出てくる。訳すと「指定されたキーは長すぎます。キーの長さは最大767バイトです。」
調べていくとvarchar型の文字数を191に制限しなければこのエラーが出るらしい。
app\Providers\AppServiceProvider.phpに以下を追加。
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
自分はSchemaクラスをuseするのを忘れていたため時間がとられてしまった。
use Illuminate\Support\Facades\Schema;を忘れないように。
デプロイする
HerokuではアプリをGitを利用してデプロイする。自分はGitも初心者だったためここでもかなり時間を要した。
まずはHerokuのアプリをリモートとして登録
git init
heroku git:remote -a <herokuのアプリ名>
ローカルリポジトリにコミットし
git add .
git commit -m "コミットメッセージ"
プッシュすることによりデプロイする
git push heroku master
問題がなければheroku openでサイトを開くことができる
heroku open
思った以上に時間がかかってしまった。自分が犯していた間違いはdevelopブランチにProcfileファイルを作成し、マージしないままmasterをプッシュをしていたこと。そのほかにもGitの基本的な操作ができていなかった。HerokuよりもGitに慣れていないことを痛感させられた。
こちらの記事に全体的な流れをまとめましたのでよかったらどうぞ
【Laravel】Herokuでのデプロイ