#はじめに
なぜ開発中のAPI外部サーバーにおいて公開することにしたのか。
なぜなら遠隔でフロントとバックの開発を同時並行で円滑に進めていくためです。
しかし、外部サーバーなど一度も使ったことがなかったのでいろいろ大変でした。
#welcome画面を表示させるまで
Procfileを作成します。
web: vendor/bin/heroku-php-apache2 public/
intlを有効化します。
$ composer require ext-intl:*
ここからherokuの環境変数を設定していくわけなんですが、ここでまず詰まりました。
$ heroku config:set
› Error: Missing required flag:
› -a, --app APP app to run command against
› See more help with --help
はい、configを開こうとするとエラーが出ました。
$ heroku git:remote -a アプリ名
今までgithubと連携してそこからデプロイをしていたのですが、それが原因だったみたいです。herokuに直接デプロイすることで解決しました。
(他にも解決法はあると思います)
さあ、これでやっとwelcome画面が表示されるようになりました。
#DB問題
ローカルではsqliteを使って開発していました。
herokuについて何も知らなかったのでそのままデプロイしたら使えるのだろう、と甘くみていました。
しかーし、何を試してもAPIを使おうとするとエラーを吐かれてしまいます。
なぜなら、答えは簡単「herokuはsqliteに対応していない」
herokuのDBはpgsqlだということです。
pgsqlは触ったことがなかったので、変更するならせめて触ったことのあるmysqlが精一杯でした。
どうやらherokuでもadd-onをインストールすればmysqlが使えるようになるらしいとの情報を入手。
それがこちらのClearDB。
このコマンドで無料版をインストールします。
$ heroku addons:create cleardb:ignite
ここでもエラーが出ました。
$ heroku addons:create cleardb:ignite
Creating cleardb:ignite on ⬢ アプリ名... !
▸ Please verify your account to install this add-on plan (please enter a credit card) For more information, see
▸ https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify
クレジットカード情報を入力することでこのエラーは解決します。
次にホスト名などを取得します
$ heroku config:get CLEARDB_DATABASE_URL
ここで返される値の内訳は以下の通りです。
mysql://[ユーザ名]:[パスワード]@[ホスト]/[DB名]?reconnect=true
ここで得た値をもとに環境変数を設定していきます。
$ heroku config:set \
> DB_CONNECTION=mysql \
> DB_HOST=[ホスト] \
> DB_DATABASE=[DB名] \
> DB_USERNAME=[ユーザー名] \
> DB_PASSWORD=[パスワード]
それではmigrate&seedをしていきます。
$ heroku run php artisan migrate --seed
ここでエラーが頻発しました。
- uesrsテーブルのmigrateで問題発生
今回のAPIではusersテーブルは使用しなかったので、migrationファイルをコメントアウトして無効化するという強行策で解決。
- どうやらmigrationの宣言の部分で問題発生
こちらも強行策で解決させました。
MySQLWorkbenchをインストールして、手動でテーブルを作成していきました。笑
そして最後にseedでテストデータを入れます。
$ heroku run php artisan db:seed
これでやっとAPIが使えるようになりましたー!