В чем идея папок окружения в Yii2 и как их использовать?

Я несколько раз читал документацию по Yii2. Я тоже гуглил и ничего полезного пока не нашел.

Проблема в том, что я не понимаю концепцию папок среды. Пожалуйста, позвольте мне объяснить:

  1. Я могу использовать ветки в Git (для разработки, подготовки и производства)
  2. Файлы *-local.conf игнорируются Git, и они в любом случае не будут переданы в промежуточную или производственную среду.

Почему я должен дублировать все свои контроллеры, представления и другие файлы в environment/dev и environment/prod?

В каких папках я на самом деле должен делать свою разработку?

Какова процедура развертывания папок среды? Должен ли я вызывать init каждый раз после отправки изменений на рабочий сервер?


person Roman Podlinov    schedule 18.12.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions /21305811/   -  person arogachev    schedule 18.12.2014
comment
Видел эту тему, но вопрос не освещался.   -  person Roman Podlinov    schedule 18.12.2014


Ответы (2)


Вы, скорее всего, проигнорируете папку environments, если у вас нет особой необходимости поступать иначе.

Весь ваш код должен находиться в папках common, frontend, console или backend. common appart, это доступные по умолчанию точки входа в ваше приложение, где вы разместите логику вашего контроллера. Очевидно, что вам не обязательно использовать их все, достаточно просто использовать frontend в зависимости от ваших конкретных потребностей.

Но опять же, если вы выбрали расширенный шаблон, вероятно, будет использоваться комбинация... например, common, backend и frontend

Папка среды

Папки среды соответствуют параметрам, которые у вас есть при запуске ./init. То есть назвать:

  • 0) Развитие
  • 1) Производство

Они содержат все файлы, которые редактируются и/или добавляются при запуске команды ./init. К ним относятся все файлы, которые игнорируются (и, следовательно, никогда не создаются) системой контроля версий (git).

Мы говорим о таких файлах, как файлы *-local.php, которые по очевидным причинам никогда не должны быть версионными. А также сценарии входа, которые меняются в зависимости от среды, которую вы инициализируете. Например, вы хотите, чтобы отладка и выход из системы выполнялись в рабочей среде, но были включены в процессе разработки. Это вещи, которые вы не можете настроить на уровне файла конфигурации, так как они должны быть установлены до макета приложения Yii или которые, как вы просто знаете, должны быть установлены по умолчанию каждый раз при инициализации среды.

Вы можете добавить еще одну среду под названием pre-production, например, которая будет инициализировать ваше приложение точно так же, как рабочая среда, за исключением того, что будет включено ведение журнала. Для этого вы должны скопировать папку environments/prod, изменить сценарии входа в соответствии с вашими потребностями и добавить опцию в environments/index.php.

./init нужно запустить только один раз после того, как вы клонируете ветку. Если вы хорошо разбираетесь в непрерывной интеграции, тогда вашему серверу непрерывной интеграции может понадобиться запускать скрипт ./init при каждом запуске. Это может зависеть от того, как вы его настроили. Вам нужно будет запустить его снова, если вы внесли изменения в папки среды, которые хотите применить.

общий, консольный и *ends

Это вы, наверное, уже знаете, но вдруг кому-то интересно.

  • common : содержит логику, общую для всего вашего приложения, от файлов конфигурации до моделей.
  • интерфейс: все, что относится к веб-интерфейсу вашего интерфейса, также может иметь собственные модели и т. д.
  • бэкенд: то же, что и выше, но позволяет использовать отдельную логику между внешним и внутренним приложениями.
  • console : для доступа к вашему приложению через командную строку с помощью ./yii controller/action

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

person Pomme.Verte    schedule 18.12.2014
comment
Спасибо за подробный ответ. Разделение между общим/фронтендом/бэкендом было для меня ясным; Я использовал его раньше в своих проектах. Только dev/prod новый и было не понятно есть смысл его использовать для меня или нет. - person Roman Podlinov; 19.12.2014
comment
Роман согласился, что документы yii2 вообще не дают понять, как ./init и папки окружения сочетаются друг с другом. - person gvanto; 26.05.2016

Во-первых, вам не нужно помещать контроллеры и представления в папку окружения. Папка environment содержит файлы с различной конфигурацией для разных сред.

Например, в файле frontend/web/index.php вы хотели бы установить YII_ENVto prodwhile в производственной среде и devwhile в среде разработки. В папке environment этот файл уже доступен с этими конкретными настройками в определенных папках.

Итак, как объясняется здесь, все, что вам нужно сделать, это запустить команду init и выбрать свою среду, и она поместит файлы, специфичные для среды, в нужное место.

person Tahir    schedule 18.12.2014
comment
Как это будет работать во время процедуры развертывания? Должен ли я вызывать init после каждого запуска в производство? Я прочитал документ, прежде чем создать здесь вопрос. - person Roman Podlinov; 18.12.2014
comment
@RomanPodlinov Обычно я думаю, что вам нужно запускать init только в том случае, если вы что-то изменили в этих файлах. И я думаю, что вы должны вносить в файлы папки environment только те изменения, которые вы хотите сохранить между вашим контролем версий и средами. - person Tahir; 18.12.2014
comment
Я думаю, что документация переехала. yii2-framework.readthedocs.io /ru/stable/guide/ - person Craig London; 26.04.2017