API平台无法识别真实的环境变量

问题描述 投票:0回答:1

我设置了一个全新的骨架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".

是什么使Symfony和Doctrine很好地识别了API平台却忽略了我的环境变量?

api-platform.com
1个回答
0
投票

事实证明这是docker配置中的问题。当使用s6 overlay作为流程管理器时,运行PHP的services.d文件需要使用with-contenv帮助程序才能使环境变量可用。

替换

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

with

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

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

© www.soinside.com 2019 - 2024. All rights reserved.