Почему файлы .env предпочтительнее файлов .yaml для переменных среды?

#php #symfony #environment-variables #symfony4 #symfony-4.2

#php #symfony #переменные среды #symfony4 #symfony-4.2

Вопрос:

Какова основная причина, по которой Symfony предпочитает использовать файлы.env — для хранения в них значений переменных среды — вместо более гибких файлов .yaml?

Я спрашиваю об этом, потому что я прочитал этот комментарий, в котором говорится:

Это было намного проще, когда мы использовали файл .yaml.
Я полностью понимаю, почему нам нужно было переключиться на файл .env, но ИМХО мы должны все переосмыслить.

Спасибо за ваше время.

Комментарии:

1. Одним из явных преимуществ использования переменных env является то, что вы можете обновлять их значения без перестройки производственного кэша. Существует также ряд стратегий развертывания, которые используют переменные env. Сказав это, я просто использую параметры. файл yaml. Все еще работает просто отлично.

2. Спасибо @Cerad. Возможно, вы уже ответили на мой вопрос, но я не могу полностью его понять. Извините за это… Мой вопрос, на самом деле, связан только с используемыми типами файлов. Я имею в виду, почему Symfony предпочел рекомендовать определять переменные env в файлах .env, а не в файлах .yaml ? Даже если я не использую Symfony, я бы хотел определить значения env vars моего собственного web MVC в файлах .yaml. Хотя у меня есть некоторые сомнения, увидев, что Symfony и многие другие крупные проекты используют файлы .env.

3. Просто для ясности, 99% конфигурации Symfony по-прежнему выполняется с использованием файлов yaml. В файлах .env хранится только несколько значений, специфичных для среды, или секретная информация. И ваш вопрос просто не подходит для stackoverflow. sof хочет видеть конкретные вопросы. Если вы посмотрите в разделе сообщества в документации Symfony, вы увидите некоторые области обсуждения, специфичные для Symfony. И никто не скажет вам, почему за вас проголосовали, поскольку предоставление сведений о голосовании считается «недобрым».

4. В *NIX операционных системах есть вызываемая команда оболочки env . Используемый синтаксис — это то, что вы видите в .env файлах, которые используются прямо сейчас — KEY=VALUE . .env Не обязательно существовать. Он используется для переопределения существующих значений в зависимости от среды. A .env не используется для настройки в Symfony или других популярных фреймворках — он используется для дополнения , и я предполагаю , что они пытаются следовать пути, проложенному давным-давно людьми, которые работали на ОС unix. .env прост, удобен, и его используют несколько разных проектов (не связанных с php), поэтому в devops действительно легко изменять конфигурации.

5. Что ж, исходя из мнения парня, который целый день занимается devops (меня), я могу сказать вам, что я и остальные мои коллеги предпочитаем .env другие форматы. Причина действительно проста — для изучения синтаксиса требуется 0 времени, в то время как с такими форматами, как .yaml , это не так. К сожалению, нам приходится работать с .yaml , .env , json конфигурацией, .ini , .cnf .conf , а с чем нет, что приводит нас к ситуации с XKCD: Standards, в которой мы находимся 🙂

Ответ №1:

Согласно новому в Symfony 3.2: Переменные среды выполнения:

Их основные преимущества в том, что их можно изменять между развертываниями без изменения какого-либо кода и что их не нужно проверять в репозитории кода.

Этого нельзя сказать о файлах yaml.

Комментарии:

1. Автор блога пытается объяснить преимущества env vars фразой, которая для нас, некоторых читателей, может иметь несколько значений. В результате ваше предложение «То же самое нельзя сказать о файлах yaml». также абстрактно для меня. Возможно, вы поняли запись в блоге лучше меня, Nicodemuz. Не могли бы вы объяснить мне представленный принцип (ы) более четкими словами? Особенно сравнение, которое вы подчеркнули. Я думаю, что небольшой пример тоже поможет… Я очень заинтересован в вашем обновленном ответе, потому что я чувствую, что он будет содержать то, что я ищу. Заранее благодарю вас.

2. @dakis Я думаю, вам следует сначала ознакомиться с тем, какие переменные среды. Может быть, прочитайте статью в Википедии об этом: en.wikipedia.org/wiki/Environment_variable .. вы должны рассматривать переменные среды как переменные, к которым потенциально могут быть доступны несколько других приложений, также работающих на том же сервере. Таким образом, вы можете настроить несколько приложений напрямую, изменив одну переменную. Как только вы поймете преимущества и назначение переменных среды, вы быстро поймете, что их определение в файлах yaml на самом деле не делает их «переменными среды».

3. Спасибо. Я понимаю. Мой вопрос, возможно, был немного запутанным. Позвольте мне попытаться внести ясность: с одной стороны, существуют «реальные» переменные окружения (будь то переменные всей операционной системы или те, которые определены в виртуальных хостах, например, с помощью SetEnv ). Они автоматически сохраняются движком PHP в переменных $_SESSION и $_ENV при выполнении HTTP-запроса (например, в браузере). С другой стороны, существуют «пользовательские» переменные среды : пары ключ / значение, определенные разработчиками в файлах с расширением «.env» (в общем случае).

4. Во время выполнения упомянутые файлы программно считываются, а содержащиеся в них значения переопределяют (или добавляются к ним) «реальные» переменные среды, ранее сохраненные в $_SESSION и $_ENV массивах… Ну, я подумал начать использовать файлы .yaml вместо файлов .env для определения «пользовательских» переменных env в моем проекте. Но сначала я решил немного порыться в Интернете по этому поводу. Затем я обнаружил, что у Symfony была важная причина по-прежнему использовать файлы .env, даже если они могли бы использовать . вместо этого файлы yaml. Эту причину я пытаюсь выяснить.

5. @dakis Они могли бы использовать файл .yaml для этих значений. Вероятно, они использовали файл .env, потому что разработчики уже привыкли использовать этот файл для переменных среды.