記事内に広告が含まれています。
おつかれさまです。すぺきよです。
仕事でCakePHP5を使う機会があり、チュートリアル中です。
初期セットアップなどはうまく行き、Dockerを使用して環境構築も成功。
DBの設定をconfig/app.phpに設定するも「CakePHP is NOT able to connect to the database.」というエラーが出てDBに接続がうまく行きませんでした。
試行錯誤してなんとか接続成功まで持っていけたので、ここまでのセットアップ手順と解決方法を共有します。
私のたどり着いた解決策
急いでいる方のために、私がたどり着いた解決策から書きます。
app_local.phpのDatasources.defaultの中身を全て消す(コメントアウトする)
CakePHP5で初期に作成されるファイルの中に「config/app_local.php」なるファイルが存在します。
チュートリアルの中では「config/app.php」にデータベースのホスト名などを書けと言われていますが、ここにいくらパラメータを設定しても「config/app_local.php」で同様のパラメータを設定していると「config/app_local.php」の方が勝つみたいです。
なぜこれで行けるのか
CakePHPのチュートリアルにも確かに下記記載があります。

そう、チュートリアルにあるとおり「config/app.php」を触っても「config/app_local.php」に別の設定をしていたら意味がないということですね。
なんで最初からこんな構造になっているんだろう。5.3.2の問題かな・・・?
これまでの手順
Dockerファイルの作成
開発サーバーは用意するのが面倒だったので手軽にDockerで作成。
Dockerfileの中身がこれ。
FROM php:8.5-apache
# intl に必要なライブラリ
RUN apt-get update \
&& apt-get install -y libicu-dev \
&& docker-php-ext-install intl pdo_mysql mysqli \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite
ENV APACHE_DOCUMENT_ROOT=/var/www/html/webroot
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' \
/etc/apache2/sites-available/*.conf \
/etc/apache2/apache2.conf \
/etc/apache2/conf-available/*.conf
WORKDIR /var/www/html
起動するのにdocker-compose.ymlを用意。中身がこれ。
version: "3.8"
services:
web:
build: ./Docker
container_name: php85-web
ports:
- "8080:80"
volumes:
- .:/var/www/html
depends_on:
- db
db:
image: mariadb:10.11
container_name: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: cms
MYSQL_USER: cmsuser
MYSQL_PASSWORD: cmspass
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
db_data:
Dockerfileとdocker-compose.ymlは以下の構造になるように配置。
/<project-root>/
┣ Doekr/
┃┗ Dockerfile
┗ docker-composer.yml
この状態でターミナルやコマンドプロンプトを開き<project-root>に移動してから、次のコマンドでDockerを起動する。
docker compose up -d
app.configを書き換え
チュートリアルにある通り「config/app.php」を書き換えます。
今回は下記のように書き換えました。(元々あったコメントは省略)
'Datasources' => [
'default' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
'timezone' => 'UTC',
'host' => 'db',
'port' => 3306,
'username' => 'cmsuser',
'password' => 'cmspass',
'database' => 'cms',
'encoding' => 'utf8mb4',
'flags' => [],
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
],
app_localのdatabase設定を削除
ここがミソです。
「config/app_local.php」のdatabases.defaultの中身を削除して空にします。
'Datasources' => [
'default' => [
],
無事に繋がったみたい
ここまでやって、「localhost:8080」に接続すると、Databaseの接続が緑になることが確認できました。


コメント