【问题标题】:API Platform does not recognize true environment variablesAPI 平台无法识别真正的环境变量
【发布时间】:2021-03-02 23:36:26
【问题描述】:

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


    【解决方案1】:

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

    更换

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多