herokuでMySQL(ClearDB)を使う手順と諸注意

herokuでMySQL(ClearDB)を使う手順と諸注意
                 
最終更新日から90日以上経過しています。

流行ってるらしいので手を出してみました、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のバージョンによる問題。

原因、及び対応方法は以下の記事で詳しく解説されています。

IT系の雑記カテゴリの最新記事