Pull to refresh

Comments 9

В текущий реалиях новости о Шторме как то кажутся чуточку бесполезными после аннулирование купленных ранее лицензий.

Схема работы довольно бессмысленная и я пока не встречал её использование в реальной продуктовой разработке. Так или иначе, каждый её переделывал на более удобный вариант с игнором любого .env файла, где сам файл .env и был точкой истинности для определённого окружения, и выставляется (создаётся) отдельно на каждом из окружении руками.

Очень даже удобно, когда в `.env` видно какие локальные настройки можно переопределить. Если открыть хоть через 10 лет, не надо будет по всему коду искать, как же эта переменная называлась.

А настоящие настройки храню в `.env.local`, так что с "каждый её переделывал" вы погорячились ;)

Более того, я подобную схему использую не только в PHP - в vuejs тоже что то подобное по умолчанию

Согласен, чуть-чуть чувствуется что перегнул с иронией.

Однако не поверите - реально на каждом проекте (говорю про 3 разных, начиная с симфы 3.4, заканчивая 7.х) видел другую, где всё ровно наоборот: .env.example как шаблон, а .env уже реальные значения под гитигнором. Точно такая же схема и в ларке идёт по умолчанию. А оригинальную симфонёвую схему ни разу не встречал.

Ну с лары наверное эта привычка и перекочевала. Только непонятно зачем себе усложнять жизнь - symfony flex например пишет в .env умолчания с маркерами (чтобы почистить при удалении пакета) если есть в рецепте.

Ну не только лара, ещё раньше докер подхватывал env файл по дефолту в какой-то версии, а потом заменили на явное указание env_file секции с require: false, решения под ноду ещё. Рекомендации в Rails такие же. Да куча, подозреваю, решений, где рекомендуется именно использование файла .env для текущего окружения, а не его оверрайд.

Единственное исключение, которое я встречал (помимо дефолтов Symfony) - это Sentry, там .env по-дефолту, а для оверрайда предлагают использовать .env.custom.

Но в любом случае, по-мне, это примерно тоже самое как поставлять php.ini в качестве шаблона, а чтоб переопределить - надо создать файл php.local.ini. Странное решение.

P.S. Я уже признался, что погорячился. Можно списать на то, что автор дайджеста по симфе -- токсик и просто хейтит "непривычные для него решения")

Дело в том, что в symfony в .env не "шаблон", а реальные умолчания которые можно поменять не лазая по конфигам, а .env.* файлы его не заменяют, а дополняют. В отличии от ларовского .env.example

Но в любом случае, по-мне, это примерно тоже самое как поставлять php.ini в качестве шаблона, а чтоб переопределить - надо создать файл php.local.ini

Вы не поверите, но я примерно так и делаю ;)

Только опять же - не "в качестве шаблона", а как умолчания.

В докер образах например свои настройки (таймзону, может ограничения на память и загрузку файлов там) пихаю в $PHP_INI_DIR/conf.d/app.ini

Что то вроде

RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini

COPY docker/php/php.ini $PHP_INI_DIR/conf.d/app.ini

Это так называемый "debian way", когда основной файл конфигурации не надо трогать (чтобы при обновлении пакетов не было конфликтов), а свои настройки класть в директорию "*.d/" файлы из которой подключаются в основном конфиге.

Вы не поверите, но я примерно так и делаю ;)

Для докера я тоже, и строчки почти что полностью идентичные. :)

Однако описанный вами вариант не совсем тоже самое. Дефолты для env-переменных по-хорошему стоит хранить в параметрах по-моему:

parameters:
  env(SOME_IS_ENABLED): '1'
  app.some.is_enabled: '%env(bool:SOME_IS_ENABLED)%'

Так что .env как раз и выступает в роле оверрайда этих дефолтов, т.е. это и есть "свои настройки", которые и кладутся в проект для переопределения дефолтов.

Дефолты для env-переменных по-хорошему стоит хранить в параметрах по-моему

Это уже наверное вкусовщина, но мне удобнее когда все параметры рядышком лежат - env переменные не только в `parameters` могут быть.

Заставил задуматься. И ведь действительно.

Sign up to leave a comment.

Articles