問題
Phoenixの現時点の最新バージョンである1.1.4と、MySQLにアクセスするためのドライバであるmariaexには、下記のような依存関係があります。
phoenix 1.1.4 -> phoenix_ecto 2.0.1 -> ecto 1.1.3 -> mariaex 0.5.0
mariaexの最新バージョンは0.6.2になりますので、上記の0.5.0はやや古いバージョンということになりますが、このバージョンがどうやらMySQL5.7に対応出来ていないようです。
現時点で、Mac環境でhomebrewを使用してMySQLをインストールすると5.7.xがインストールされると思いますが、その状態でElixir/Phoenixをインストールしてプロジェクト作成後に、
mix ecto.migrate
というマイグレーション用コマンドを実行すると、なんのエラーも表示されないまま実行がスタックした状態になると思います。
コードを追ってみた限りでは、どうやらMariaex.Connection.query/4
関数が問題箇所のようですが、具体的な原因までは分かりませんでした。
回避方法
回避方法は2種類あります。
方法1. mariaexの最新バージョンの使用を強制する
mix.exsのdeps関数に下記のように記述します。
{:mariaex, "~> 0.6.2", override: true},
これによって、mariaexの最新バージョンがインストールされるようになります。この回避方法に関しては下記の情報を参考にしました。
Please update the mariaex dependency to 0.6.1 to work with mysql 5.7.9
方法2. MySQL5.6を使用する
homebrewでMySQLをインストールする際に、
brew install mysql
ではなく
brew install homebrew/versions/mysql56
というコマンドを実行すると、MySQL5.6がインストールされます。
既にMySQL5.7をインストールしてしまっている場合は、下記の記事をご参照ください。
最後に
ectoの2.0がもうすぐリリースされる(mariaexの0.6以降が使用されるようになる)ようですが、それに合わせて恐らくPhoenixもバージョンアップすると思いますので、とりあえず上記どちらかの対応で応急処置をしておいて、Phoenixの新バージョンリリース後にアップグレードする、という方式が望ましいのではないかと思われます。