ここが嵌るよCircleCI 1.0
基盤ユニットの貞方(@sadapon2008)です。 CircleCI 1.0+CakePHP3+PostgreSQLのテストで嵌った出来事を紹介します。
1. ドキュメントで紹介されているPHPのバージョンが古い
2017年7月現在でのCircleCIの↓のドキュメントではPHP 7.0.4が例として書かれています。
https://circleci.com/docs/1.0/language-php/
これが結構古いバージョンで、PHPUnitを実行するとsegmentation faultが発生したりします。
↓を参考に7.0.x系なら7.0.17を使うのが無難です。
https://circleci.com/docs/1.0/build-image-trusty/#php
machine: php: version: 7.0.17
2. デフォルトでxdebugが有効になっている
xdebugを有効にしておくとテストの実行時間が長くなってしまいます。必要がなければ、circle.ymlで以下のように無効にしましょう。
dependencies: pre: - rm /opt/circleci/php/$(phpenv global)/etc/conf.d/xdebug.ini
3. PostgreSQLのデフォルトの照合順序がen_US.UTF-8になっている
これはPaaS系だとありがちな話ですが、デフォルトの照合順序がen_US.UTF-8と英語になっています。これを解消するには、以下のようにデータベースを作成する際に明示的に指定するのが無難です。
database: override: - psql -U ubuntu postgres -c "CREATE DATABASE blog_test with template = template0 encoding = 'UTF8' lc_collate = 'ja_JP.UTF-8' lc_ctype = 'ja_JP.UTF-8';"
ただし、日本語のロケールを指定するには自分で追加しないといけないので、circle.ymlで以下のようにしておく必要があります。なお、デフォルトのPostgreSQLのバージョンが変わった場合はパスの変更が必要ですので要注意です。
machine: pre: - sudo locale-gen ja_JP.UTF-8 - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/pg_ctl stop - sudo -E -u postgres rm -r /var/lib/postgresql/9.5/main - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/initdb --encoding=UTF8 --no-locale --username=ubuntu - sudo -E -u postgres PGDATA=/var/lib/postgresql/9.5/main /usr/lib/postgresql/9.5/bin/pg_ctl start
参考:
4. デフォルトのタイムゾーンはUTC
JSTに変えたい場合は、circle.ymlで以下のようにします。
machine: timezone: Asia/Tokyo