#困っていること
プログラミング初学者です。
ホストOS:Windows10で、dockerを使ってLaravelで開発をしています。
webサーバー、appサーバー、開発用dbサーバー、テスト用dbサーバー用の4つのコンテナを作り、テスト実行時にはテスト用dbを使うように設定しようと思いました。
しかし、自分で調べた限りのやり方を試しましたが、テスト時に開発用が使われてしまいます。
設定に不備があるのだと思いますが、どうすれば良いかわかりません。
ご教授願います。
#前提となる環境
####ディレクトリ構造
programming-school-review
├── app(ここにlaravelが入ってます)
└── docker(ここにdocker-compose.ymlがあります)
####dockerの.envファイル
<省略> DB_PORT=3306 DB_DATABASE=programming_school_review DB_USERNAME=root DB_PASSWORD=root DB_TESTING_DATABASE=programming_school_review_testing DB_TESTING_PORT=3307 DB_TESTING_USERNAME=root DB_TESTING_PASSWORD=root
####docker-compose.yml
version: "3" services: app: build: context: ./php args: - TZ=${TZ} volumes: - ${APP_PATH}:/app - ./php/php.ini:/usr/local/etc/php/php.ini working_dir: /app environment: - DB_CONNECTION=mysql - DB_HOST=db - DB_DATABASE=${DB_DATABASE} - DB_USERNAME=${DB_USERNAME} - DB_PASSWORD=${DB_PASSWORD} - DB_TESTING_HOST=db-testing - DB_TESTING_DATABASE=${DB_TESTING_DATABASE} - DB_TESTING_USERNAME=${DB_TESTING_USERNAME} - DB_TESTING_PASSWORD=${DB_TESTING_PASSWORD} - TZ=${TZ} web: image: nginx:1.17-alpine depends_on: - app ports: - ${WEB_PORT}:80 volumes: - ${APP_PATH}:/app - ./web/default.conf:/etc/nginx/conf.d/default.conf environment: - TZ=${TZ} db: image: mysql:8.0 volumes: - db-store:/var/lib/mysql - ./db/log:/var/log/mysql - ./db/my.cnf:/etc/mysql/conf.d/my.cnf environment: - MYSQL_DATABASE=${DB_DATABASE} - MYSQL_ROOT_PASSWORD=${DB_PASSWORD} - TZ=${TZ} ports: - ${DB_PORT}:3306 db-testing: image: mysql:8.0 volumes: - db-testing-store:/var/lib/mysql - ./db/my.cnf:/etc/mysql/conf.d/my.cnf environment: - MYSQL_DATABASE=${DB_TESTING_DATABASE} - MYSQL_ROOT_PASSWORD=${DB_TESTING_PASSWORD} - TZ=${TZ} ports: - ${DB_TESTING_PORT}:3306 volumes: db-store: db-testing-store:
#やったこと
####Laravelのapp/.envに設定を追加
<省略> DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=programming_school_review DB_USERNAME=root DB_PASSWORD=root DB_TESTING_HOST=db-testing DB_TESTING_PORT=3306 DB_TESTING_DATABASE=programming_school_review_testing DB_TESTING_USERNAME=root DB_TESTING_PASSWORD=root <省略>
####config/database.phpに設定を追加
'connections' => [ <省略> 'mysql_testing' => [ 'driver' => 'mysql', 'host' => env('DB_TESTING_HOST', '127.0.0.1'), 'port' => env('DB_TESTING_PORT', '3306'), 'database' => env('DB_TESTING_DATABASE', 'forge'), 'username' => env('DB_TESTING_USERNAME', 'forge'), 'password' => env('DB_TESTING_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], <省略> ],
####phpunit.xmlを変更
<php> <server name="APP_ENV" value="testing" force="true"/> //変更 <server name="BCRYPT_ROUNDS" value="4"/> <server name="CACHE_DRIVER" value="array"/> <server name="DB_CONNECTION" value="mysql_testing" force="true"/> //変更 <server name="DB_DATABASE" value="programming_school_review_testing" force="true"/> //変更 <server name="MAIL_MAILER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> <server name="TELESCOPE_ENABLED" value="false"/> </php>
force="true"
を追加するという情報があったので試しましたが変わりませんでした。
これらの変更を行ったあと、$php artisan config:cache
を実行してテストをしましたが、開発用dbを使われてしまいます。
$php artisan migrate --database=mysql_testing
は正常に実行されるので、Laravelとテスト用dbの接続自体は出来ているのかなと思うのですが、一体どうすればよいでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/10 14:01
2021/04/10 14:23 編集
2021/04/11 03:51