我正在尝试在Symfony 5中设置一个秘密管理员。我遵循了此Secrets Management Setup课程和How to Keep Sensitive Information Secret文档。
我的应用正在触发:
Fatal Error: Maximum execution time of 30 seconds exceeded
Environment variable not found: "DATABASE_URL".
正如文档所述,我从DATABASE_URL
中删除了.env
并使用了php bin/console secrets:set DATABASE_URL
,其输出为:
[OK] Sodium keys have been generated at "config/secrets/dev/dev.*.public/private.php".
!
! [CAUTION] DO NOT COMMIT THE DECRYPTION KEY FOR THE PROD ENVIRONMENT⚠️
!
[OK] Secret "DATABASE_URL" encrypted in "config/secrets/dev/"; you can commit it.
这是php bin/console secrets:list
的结果:
// Use "%env(<name>)%" to reference a secret in a config file.
------------------- -------- -------------
Secret Value Local Value
------------------- -------- -------------
DATABASE_URL ******
------------------- -------- -------------
这是我在%env%
中使用config/packages/doctrine.yaml
的方式:
doctrine:
dbal:
# ...
url: '%env(DATABASE_URL)%'
# ...
我正在使用PHP 7.2.21并遵循文档:
The Secrets系统需要与PHP 7.2捆绑在一起的Nadium PHP扩展。如果您使用的是较早的PHP版本,则可以安装libsodium PHP扩展或使用 paragonie / sodium_compat 软件包。
Symfony控制台仍然要求我安装paragonie/sodium_compat
polyfill,我做了什么。
我的应用程序不再起作用。我想念什么?
事实证明,问题出在paragonie / sodium_compat软件包中。 Fatal Error: Maximum execution time of 30 seconds exceeded
之前的最后一条调试消息是:
timeParagonIE_Sodium_Core_Util::mul() vendor/paragonie/sodium_compat/src/Core/Curve25519.php:756
因此Symfony无法获取环境变量并触发错误。
然后我尝试解密秘密并将其存储在.env.dev.local
中,以避免使用此命令在每次请求时解密它们:
php bin/console secrets:decrypt-to-local --force
但是Symfony会继续对其解密,并且不使用.env.dev.local
。