Привет, ребят.
Подскажите пожалуйста - как прокидывать переменную окружения пр запуске
Docker контейнера?
Моя задача - прогрузить фикстуры перед запуском теста.
В офдоке указана следующая конструкция для
Makefile для этой задачи:
https://symfony.com/doc/current/the-fast-track/ru/...
SHELL := /bin/bash
tests: export APP_ENV=test
tests:
symfony console doctrine:database:drop --force || true
symfony console doctrine:database:create
symfony console doctrine:migrations:migrate -n
symfony console doctrine:fixtures:load -n
symfony php bin/phpunit $@
.PHONY: tests
Я пробую след образом:
SHELL := /bin/bash
tests: export APP_ENV=test
tests:
docker-compose run --rm manager-php-cli bin/console doctrine:database:drop --force || true
docker-compose run --rm manager-php-cli bin/console doctrine:database:create
docker-compose run --rm manager-php-cli bin/console doctrine:migrations:migrate -n
docker-compose run --rm manager-php-cli bin/console doctrine:fixtures:load -n
docker-compose run --rm manager-php-cli php bin/phpunit $@
.PHONY: tests
Но при запуске: make tests ловлю ошибку т.о., как будто бы эта переменная окружения не подцепилась.
Could not create database "app" for connection named default
An exception occurred while executing 'CREATE DATABASE "app"':
SQLSTATE[42P04]: Duplicate database: 7 ERROR: database "app" already exists
Т.к.
app - название реальной базы данных,
app_test - тестовой
Скрипт пытается создать сызнова ныне существующую рабочую базу.
В
.env.test подключение определено так
DATABASE_URL=pgsql://app:secret@manager-postgres-test:5432/app
(при создании базы в тесте почему то название базы меняется на app_test)
В .env для боевой базы подключение определено так:
DATABASE_URL=
pgsql://app:secret@manager-postgres:5432/app
Эта тестовая база в отдельном контейнере.
manager-postgres:
image: postgres:13.3-alpine
volumes:
- manager-postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app
ports:
- 54321:5432
# тестовая база
manager-postgres-test:
image: postgres:13.3-alpine
volumes:
- manager-postgres-test:/var/lib/postgresql/data
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app_test
ports:
- 54322:5432
Шо не так?