#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, потому что разработчики уже привыкли использовать этот файл для переменных среды.