Symfony не может найти секретную переменную среды - PullRequest
3 голосов
/ 03 апреля 2020

Я пытаюсь настроить секретный менеджер в Symfony 5. Я прошел этот Настройка управления секретами курс и Как сохранить секретную информацию в секрете документация.

Мое приложение теперь запускается:

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 и следующие документация:

Системе Secrets требуется натриевое расширение PHP, которое входит в комплект PHP 7.2. Если вы используете более раннюю версию PHP, вы можете установить расширение libsodium PHP или использовать пакет paragonie /odium_compat .

Запрошенная консоль Symfony Мне все равно нужно установить paragonie/sodium_compat polyfill, что я и сделал.

Мое приложение больше не работает. Чего мне не хватает?

Обновление # 1

Оказывается, проблема в пакете paragonie /odium_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.

...