首页 > 解决方案 > API 平台无法识别真正的环境变量

问题描述

我设置了一个全新的骨架 Symfony 项目并添加了 API 平台包。我使用 make:entity 创建了一个实体,创建了一个迁移,能够成功执行迁移,现在可以在我的数据库中看到该表。

从 API swagger 文档页面(以及通过我本地终端中的 curl 请求),尝试对所有实体资源执行基本 GET 请求失败。该错误似乎是由于 API 使用 .env 文件中的 DATABASE_URL 而不是作为实际环境变量存在的 DATABASE_URL 造成的。这很容易看出,因为 .env 文件使用的是 MySQL,而我的实际环境变量使用的是 PostgreSQL。

执行printenv显示正确的值,bin/console debug:container --env-vars显示正确的值,并且由于迁移成功执行,Doctrine 清楚地识别出正确的环境变量。

此外,如果我从 .env 文件中删除 DATABASE_URL 行,只需尝试加载 API 就会导致 500 错误说明Environment variable not found: "DATABASE_URL".

是什么导致 API 平台忽略我的环境变量,而 Symfony 和 Doctrine 可以很好地识别它?

标签: api-platform.com

解决方案


原来这是 docker 配置中的一个问题。当使用 s6 overlay 作为进程管理器时,运行 PHP 的 services.d 文件需要使用with-contenvhelper 以使环境变量可用。

更换

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

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

允许 PHP 查看在我的 docker-compose 文件中设置的环境变量,并且 API 平台开始按预期返回结果。


推荐阅读