Я пытаюсь работать, что точка в папке окружения.
Первоначально у меня возникла идея, что вы можете указать веб-сервер на разные папки dev
и prod
в папке с environment
но после небольшого чтения я понимаю, что это не так.
В Yii 1 вы решили бы это, просто имея несколько index.php
, то есть:
index.php
index-local.php
Итак, вопрос в том, какая польза от этой новой структуры окружающей среды дает мне по-старому?
Я нашел среды очень полезными, позволяя мне поддерживать общую базу кода для нескольких клиентских проектов (на основе Yii App Advanced) и настраивать другую среду для каждого конкретного клиента, сохраняя свой собственный код частным и отдельным.
Для этого я сохраняю папку окружения в отдельном репозитории git из остальной части кода и вытаскиваю соответствующую папку на основе клиент / проект.
Это позволяет мне использовать базовый общий код для всех проектов и добавлять / переопределять любой файл для конкретного клиента или проекта, сохраняя при этом отдельные настройки конфигурации dev / prod. Если клиент использует и других разработчиков, они также удовлетворяются. Таким образом, только общий код, который я выбираю, будет использоваться совместно с клиентами, а пользовательский код будет оставаться конфиденциальным.
Я также переместил файл composer.json в папку окружения, чтобы я мог использовать разные расширения для каждого клиента / проекта, сохраняя эти частные.
Эта команда init может быть очень мощным инструментом, и вам не нужно ограничиваться шаблоном, предоставляемым основными разработчиками.
Если вам не нужны среды, то не используйте их, но я заверяю вас, что некоторые люди посчитают это очень полезным.
Документация Yii2 в WIP, но вы должны прочитать следующее:
Для переключения между этими средами вам необходимо использовать команду yii init
.
EDIT :
Эта новая функция среды больше, чем просто использование другого конфигурационного файла. Вы можете использовать другую структуру папок, другой скрипт ввода … и т. Д.
Personnaly Я не буду использовать эту функцию, мне она не нужна (я буду использовать другой скрипт ввода, как в Yii 1), но я думаю, что это не бесполезно.
Я думаю, что вы не получили реальной цели среды, представленной в Yii2.
Я попытаюсь объяснить, какова была основная цель добавления среды в yii с точки зрения разработчиков на примере и надеюсь, что вы действительно оцените ее полезность.
Предположим на мгновение, что вы – команда разработчиков (например, 5-7 человек), работающая над средним проектом, реализованным в Yii. Чтобы эффективно работать над этим проектом, ваша команда решает использовать некоторые CVS или SVN (например, GIT) и хранить все файлы проекта в хранилище в облаке для всей команды. Это де-факто стандарт при работе над средними проектами в командах, и никто не будет сопротивляться тому, что это единственный удобный и простой способ.
Итак, давайте предположим, что вы используете Yii 1.x или Yii2 с подходом к различным сценариям входа, чтобы различать локальные (разработки) и производственные среды для подключения к db или устанавливать некоторые другие конфигурации, специфичные для среды. Все в порядке и работает. Но предположим, что члены вашей команды внедрили что-то новое в проект, и вы проверяете, что репозиторий работает над обновленной версией, и вы вдруг обнаруживаете, что ваш локальный файл конфигурации (в этом случае скрипт ввода с конфигурацией) перезаписывается другим файлом члена команды, который изменения в репозитории (потому что каждый из вас использует локальную машину db с другим именем базы данных или ОС или конфигурацией или просто потому, что ваша команда использует один локальный сервер разработки db, но вы находитесь в отпуске и не можете использовать ничего, кроме своего локального машина).
Таким образом, среда Yii2 добавляет больше гибкости для использования различных сред, каждая из которых имеет свои собственные конфигурации, а также использует общие (общие) конфигурации при работе в командах по проектам средней и большой точки зрения, поэтому пример в руководстве приведен в расширенном проекте приложения.
Конечно, вы можете преодолеть все вышеизложенное с помощью некоторых решений или .gitignore, который по умолчанию используется для преодоления проблемы, описанной в Yii2, с средами. Но:
а также
В целом Yii2 – отличный продукт. Он не только добавляет много новых функций в уже отличную фреймворк, но также более надежный и гибкий, чем Yii 1.x (несмотря на то, что Yii 1.x уже был очень надежным).
Что касается Laravel или любой другой фреймворк PHP, это действительно зависит … Каждый найдет свой любимый.
Для тех, кто устал от копирования файлов, я создал полезный скрипт, который вы можете запустить в фоновом режиме, чтобы синхронизировать файлы в вашей среде 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
Затем запустите сценарий в фоновом режиме или добавьте в cron со стадом
nohup server/sync-env-files.sh >/dev/null 2>&1 &
Я хотел бы упомянуть в дополнение к @AngelCoding, так как этот вопрос все еще замечен, что я сейчас использую папки с папками environments
и определенно вижу в этом смысл.
Самые первые вещи, которые я делаю в любом проекте с открытым исходным кодом, – это создать один проект для базы кода на GitHub, а затем другой, частный, один для Bitbucket для конфигурации, другими словами, папку environments
.
Наличие этой папки облегчило мне разделить мою конфигурацию на частный репозиторий.
Таким образом, папка environments
имеет множество применений и действительно помогает отделить конфигурацию для более удобного использования, даже если она не выглядит первоначально.