Точка папки окружения Yii2

Я пытаюсь работать с тем, что является точкой в ​​папке окружения.

Первоначально у меня возникла мысль, что вы можете указать веб-сервер в разные папки dev и prod в папке environment, но после небольшого чтения я понимаю, что это не так.

В Yii 1 вы решили бы это, просто имея несколько index.php i.e.:

  • index.php
  • index-local.php

Итак, вопрос в том, какая польза от этой новой структуры окружающей среды дает мне по-старому?

Ответ 1

Я нашел среды очень полезными, позволяя мне хранить общую базу кода для нескольких клиентских проектов (на основе Yii App Advanced) и настраивать другую среду для каждого конкретного клиента, сохраняя свой собственный код частным и отдельным.

Для этого я сохраняю папку окружения в отдельном репозитории git из остальной части кода и вытаскиваю соответствующую папку на основе клиента/проекта.

Это позволяет мне использовать базовый общий код для всех проектов и добавлять/переопределять любой файл для конкретного клиента или проекта, сохраняя при этом отдельные настройки конфигурации dev/prod. Если клиент использует и других разработчиков, они также удовлетворяются. Таким образом, только общий код, который я выбираю, будет использоваться совместно с клиентами, а пользовательский код будет оставаться конфиденциальным.

Я также переместил файл composer.json в папку окружения, чтобы я мог использовать разные расширения для каждого клиента/проекта, сохраняя эти частные.

Эта команда init может быть очень мощным инструментом, и вам не нужно ограничивать шаблон, предоставленный основными разработчиками.

Если вам не нужны среды, то не используйте их, но я заверяю вас, что некоторые люди посчитают это очень полезным.

Ответ 2

Документация Yii2 в WIP, но вы должны прочитать следующее:

https://github.com/yiisoft/yii2/blob/master/docs/guide/apps-advanced.md#configuration-and-environments

Вам нужно использовать команду yii init для переключения между этими средами.

ИЗМЕНИТЬ:

Эта новая функция среды больше, чем просто использование другого конфигурационного файла. Вы можете использовать другую структуру папок, другую запись script... и т.д.

Personnaly Я не буду использовать эту функцию, мне она не нужна (я буду использовать другую запись script как с Yii 1), но я думаю, что это не бесполезно.

Ответ 3

Я думаю, что вы не получили реальной цели среды, представленной в Yii2.

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

Предположим на мгновение, что вы - команда разработчиков (например, 5-7 человек), работающая над средним проектом, реализованным в Yii. Чтобы эффективно работать над этим проектом, ваша команда решает использовать некоторые CVS или SVN (например, GIT) и хранить все файлы проекта в репозитории в облаке для всей команды. Это де-факто стандарт при работе над средними проектами в командах, и никто не будет сопротивляться тому, что это единственный удобный и простой способ.

Хорошо, теперь предположим, что вы используете Yii 1.x или Yii2 с подходом к различным сценариям входа, чтобы различать локальные (разработки) и производственные среды для подключения к db или для установки других конфигураций, специфичных для среды. Все в порядке и работает. Но предположим, что члены вашей команды внедрили что-то новое в проект, и вы проверяете репозиторий на работу с обновленной версией, и вы вдруг обнаружите, что ваш локальный файл конфигурации (в этом случае запись script с конфигурацией) перезаписывается другим файлом члена команды, который вытащили изменения в репозиторий (потому что каждый из вас использует локальную машину db с другим именем базы данных или операционной системой или конфигурацией или просто потому, что ваша команда использует один локальный сервер разработки db, но вы находитесь в отпуске и не можете ничего использовать, кроме ваш локальный компьютер).

Таким образом, среда Yii2 добавляет больше гибкости при использовании разных сред, каждая из которых имеет свои собственные конфигурации при одновременном использовании общих (общих) конфигураций при работе в командах по проектам средней и большой части, поэтому пример в руководстве приведен в расширенном приложении проект.

Конечно, вы можете преодолеть все вышеизложенное с помощью некоторых решений или .gitignore, который по умолчанию используется для преодоления проблемы, описанной в Yii2, с средами. Но:

  • Зачем беспокоиться, если все уже сделано?

и

  • Это был лишь один маленький пример полезности сред Yii2. Больше зависит от проекта и вашего воображения.

Общий Yii2 - отличный продукт. Он не только добавляет много новых функций в уже отличную фреймворк, но также более надежный и гибкий, чем Yii 1.x(несмотря на то, что Yii 1.x уже был очень надежным).

Что касается Laravel или любой другой фреймворк PHP, это действительно зависит... Каждый найдет свой любимый.

Ответ 4

Для тех, кто устал от копирования файлов, я создал полезный script, который можно запустить в фоновом режиме, чтобы синхронизировать файлы в среде вашего dev:

Файл sync-env-files.sh

#!/bin/bash

ENVIRONMENT_DIR="/var/www/example.com/environments/dev/"
DIR="/var/www/example.com/"

while [ true ]; do
    for envFile in `find $ENVIRONMENT_DIR -type f`
    do
        file=${envFile/$ENVIRONMENT_DIR/$DIR}
        if [ `stat -c "%Y" $file` -gt `stat -c "%Y" $envFile` ]; then
            #echo "copying modified file $file to $envFile"
            /bin/cp -f $file $envFile
        fi
    done
    sleep 2
done

Затем запустите script в фоновом режиме или добавьте в cron со стайкой

nohup server/sync-env-files.sh >/dev/null 2>&1 &

Ответ 5

Я хотел бы упомянуть в дополнение к @AngelCoding, так как этот вопрос все еще рассматривается, что я использую лотки environments сейчас и определенно вижу его точку.

Самое первое, что я делаю в любом проекте с открытым исходным кодом, - создать один проект для базы кода на GitHub, а затем другой, частный, один для Bitbucket для конфигурации, другими словами, папку environments.

Наличие этой папки значительно упростило мою конфигурацию в частном репозитории.

Таким образом, папка environments имеет множество применений и действительно помогает отделить конфигурацию для более удобного использования, даже если она не кажется первоначально.