流行ってるらしいので手を出してみました、heroku。
ちょっとWebアプリ作って公開してみたい、無料で。という用途に最適と感じました。
AWSとかGoogle Cloud Platformとかでも無料プランはあるのですが、従量課金なので、思わぬアクセス過多の時に事故りそうで躊躇していました。
一方でherokuの無料プランは、無料枠を使い切った場合、サーバーが停止する為、その辺りの心配が要らない事が魅力です。
そして本題。
試しにLaravel+MySQLで超シンプルWebアプリを作ってみたのですが、MySQLの導入に戸惑ったのでシェアします。
前提
以下の前提で進めます。
- herokuのアカウントは作成済み
- heroku内のLaravelアプリケーションも作成済み
導入手順
クレジットカードの登録
herokuではpostgreSQLを使用する際はクレジットカードは不要ですが、MySQLを使用する場合はクレジットカードが必要のようでした。
Add-onsの追加
MySQLを使いたいアプリのダッシュボードのResourcesから、ClearDBを追加します。
とりあえず無料で使いたいので、利用プランはIgniteを選択。
環境変数を設定する(その1)
CLEARDB_DATABASE_URLが生成されているので、その値をもとにDATABASE_URLに値を設定する。
heroku config | grep CLEARDB_DATABASE_URL heroku config:set DATABASE_URL='[上のコマンドで出力される値]'
この辺りは公式リファレンスにのっているので、そちらを参照。
heroku configでエラーになる
で、ここでつまづきました。
heroku config のコマンドだと、エラーとなりました。
$ heroku config › Error: Missing required flag: › -a, --app APP app to run command against › See more help with --help
必須の引数があるようで、対象のアプリコードをしている必要がありました。(自動で振られている場合は、xxxx-xxxx-9999みたいなコード)
データベースの作成
下準備はできたので、アプリで使用するデータベースを作成しようと以下を参考にステップを進めます。
Webからだとデータベースの作成ができない
上記リンクでは、コマンドを実行して、ポータルに移動してDBを追加するとのこと。
ClearDBポータルに移動したら、[データベース]タブをクリックし、[新しいデータベース]をクリックします。
と言うわけで指定のコマンドを実行。
heroku addons:open cleardb
ポータルは表示されるも、指定のタブが見当たらない。というか色々探しているうちに危うく有料プランにアップグレードしそうになる。結局Webからのデータベースは諦めて、ターミナルから接続して作成しました。
環境変数DATABASE_URLに設定した値から、ユーザー名、パスワード、ホスト名がわかります。
DATABASE_URL='mysql://username:password@hostname/database_name?reconnect=true'
以下で接続して、createdbします。
mysql -uusername -ppassword -hhostname
環境変数を設定する(その2)
herokuでは.envファイルではなく、環境を使用するので、Laravelでデータベースを使用する為の環境変数を設定します。
DB_CONNECTION=mysql DB_HOST=[DATABASE_URLのhostname] DB_PORT=3306 DB_DATABASE=[使用するデータベース名] DB_USERNAME=[DATABASE_URLのusername] DB_PASSWORD=[DATABASE_URLのpassword]
マイグレーション
heroku上にアプリケーションをpushして、DBをマイグレーションします。
heroku run php artisan migrate
マイグレーション時にSyntax Errorとなる
これは、LaravelのバージョンとClearDBで使用しているMySQLのバージョンによる問題。
原因、及び対応方法は以下の記事で詳しく解説されています。