kinoppyd.dev

blog

products

accounts & contact

dokku-alt の謎2

posted at 2015-09-13 02:00:05 +0900 by kinoppyd

正確には、dokkuが使っているHeroku buildpacksの謎

Railsのデータベースアダプタとして、mysql2を使っているのに、何故かdokku-altにデプロイすると、mysqlをrequireして起動の時に死ぬ。なんでだ!?

Heroku buildpacks

Herokuにアプリをデプロイすると、自動的にビルドを実行してくれるすごいやつ。オープンソースなので、dokkuも使っている。

で、こいつは恐ろしいことに、Railsアプリをデプロイすると、dokkuのコンテナ単位の設定を元にconfig/database.ymlを書き換える。便利だけど恐ろしい。

Railsの場合、Railsのコンテナに設定しているDATABASE_URLの設定を読み込み、それをURIとしてパースする。その後、スキーマを取得して、そのスキーマをadapterとして設定する。だいたいの場合は、MySQLを使うならDATABASE_URLはこんな感じの設定になると思う。

mysql://user:pass@db.domain.tld/database_name

普通なら別に良いのだが、Railsのadapterはそのまま起動時にrequireされるgem名として使用するので、mysqlの部分がそのままadapterにセットされて、mysql2を使いたいのに使えない状況になる。

解決策は、単にスキーマ部分をmysql2にすれば良い

mysql2://user:pass@db.domain.tld/database_name

良いのだが、非常に気持ち悪い気がする……