API Platform не распознает истинные переменные среды - PullRequest
0 голосов
/ 08 марта 2020

Я установил новый скелетный проект Symfony и добавил пакет API Platform. Я создал сущность с помощью make: entity, создал миграцию, смог успешно выполнить миграцию и теперь могу видеть таблицу в моей базе данных.

со страницы документации API swagger ( и через запрос curl в моем локальном терминале), попытки выполнить основной запрос c GET для всех ресурсов объекта не удаются. Ошибка возникает из-за того, что API использует DATABASE_URL из файла .env, а не DATABASE_URL, существующий в качестве фактической переменной среды. Это легко увидеть, поскольку файл .env использует MySQL, тогда как моя фактическая переменная среды использует PostgreSQL.

Выполнение printenv показывает правильное значение, bin/console debug:container --env-vars показывает правильное значение, и Doctrine четко распознает правильную переменную среды, потому что миграция выполнена успешно.

Кроме того, если я удаляю строку DATABASE_URL из файла .env, простая попытка загрузить API приводит к ошибке 500 с указанием Environment variable not found: "DATABASE_URL".

Что заставляет платформу API игнорировать мою переменную среды, в то время как Symfony и Doctrine распознают ее просто отлично?

1 Ответ

0 голосов
/ 09 марта 2020

Это оказалось проблемой в конфигурации docker. При использовании оверлея s6 в качестве супервизора процесса в файле services.d, который запускает PHP, необходимо использовать хелпер with-contenv, чтобы переменные среды были доступны.

Замена

#!/usr/bin/execlineb -P
php-fpm -R --nodaemonize

с

#!/usr/bin/with-contenv sh
exec php-fpm -R --nodaemonize

позволил PHP увидеть переменные окружения, установленные в моем файле docker -compose, и платформа API начала возвращать результаты, как и ожидалось.

...