• Какой workflow front-end разработки у вас?

    copist
    @copist
    Empower people to give
    1. локально развёрнута система в виртуалке Vagrant почти такая же как demo-сервер и prod-сервер.
    2. весь код отправляется на bitbacket в репозиторий git в ветку dev
    3. bamboo периодически проверяет состояние ветки dev (по хуку + таймаут) и через 15 минут от последнего комита запускает юнит-тесты
    4. если тесты прошли, делает merge ветки dev -> в ветку demo. Конфликтов нет.
    5. deployhq по хуку определяет, что изменилась ветка demo и запускает автоматическое обновление demo-сервера. Перед обновлением (* см. ниже) делается дамп базы, пользовательский интерфейс закрывается, крон-задачи и очереди тушатся (** см. ниже). После обновления делается дамп базы, интерфейс открывается, крон-задачи и очереди восстанавливаются, выполняется рестарт кэша.
    6. с демо-сервера собираются метрики скорости и делаются селениум тесты
    7. когда релиз, вручную мержим dev -> prod. Конфликтов нет.
    8. deployhq по хуку определяет, что изменилась ветка prod и запускает автоматическое обновление прод-сервера. Перед обновлением делается дамп базы, пользовательский интерфейс закрывается, крон-задачи и очереди тушатся. После обновления делается дамп базы, интерфейс открывается, крон-задачи и очереди восстанавливаются, выполняется рестарт кэша.

    9. если хотфиксы, то восстанавливаешь у себя базу с последнего дампа, берёшь код из prod, исправляешь, комитишь в prod, затем мержишь prod -> demo -> dev

    * обновление - это что?
    Обновление исходных кодов (PHP, Python, JS, SCSS), компиляция и сжатие CSS, сборка и сжатие JS, обновление зависимостей, установка обновлений на базу данных.

    ** зачем закрывать интерфейс, тушить крон и очереди?
    В проекте много всяких вещей, которые не хранятся в репозитории, а именно: CSS собранные из SCSS, модульное приложение на AngularJS с кучей зависимостей, подмодули git, пакеты для PHP (composer) - они на bamboo, на demo, на prod собираются заново. Это занимает время. Чтобы не было сбоев, выключаем всё, кроме самой сборки. На машинах разработчиков все зависимости обновляются по мере необходимости, а на CSS и JS следит gulp.

    Настройка всей этой кухни заняла 2 месяца. По другим проектам - неделю максимум.

    Ссылки: Bitbucket (git), Vagrant (develop), Bamboo (continuous integration), Deployhq (continuous deployment).

    Ну и чуть рекламы от спонсора ;)
    Icons8 15 000+ free flat style icons
    download?id=ufWm2fSkYEEsK5OXT4v2JzxGfn5O
    Наш стек технологий на stackshare.io
    Ответ написан
    3 комментария
  • Какой workflow front-end разработки у вас?

    nonlux
    @nonlux
    Расклад такой:

    1. Возьми docker контейнер с настроенным окружением для разработки.
    Это удобно если вдруг разработчик станет не один, слетит система, поменяешь рабочее место. Один раз настроил и забыл )
    docker запускает:
    - веб-сервер (можно nginx, можно внутри gulp, все зависит о задачи)
    - livereload сервер, через gulp ( f5 нажимать каждые 3 секунды - это больно
    - gulp watchers ( в ручную компилить всякую хню, запускать тесты скучно )

    2. Запусти vim ( или любой твой любимый редактор)
    3. пиши, бл@#ь, код:
    - less, sass и прочее по мне гораздо удобнее чистого css, меньше пишешь больше кода получаешь.
    - не пиши голый html, используй шаблонизатор любой какой удобнее, я пользуюсь twig, но и простой {{mustache }} подойдет
    4. пользуйся git. И пользуйся им часто.
    - для приветных проектов поставь gitlab
    - используй gitworkflow, ну или сделай хотя бы 2 ветки: например master и prodaction (об этом позже)
    5. CI
    - работая ты все равно допустить кучу ошибок. Проверка синтаксиса, валидация по стандартам, тесты - это все поможет тебе не облажаться.
    - если ты будешь это делать сам потеряешь кучу времени просто на то что бы запускать и проверять всю свою работу. ci сервер поможет тебе убрать эту рутину из свое жизни.
    6. Кроссбраузенрость
    - используй browserstack ( или аналоги) для просмотра результатов своей работы
    - ну уж если нашел ошибку бери реальный браузер ( или в виртуалке) занимайся отладкой
    - получение скриншотов легко подключается к ci
    - а так же из коробки работает и с локальными серверами
    7. Обратная связь с заказчиком
    - для ветки master (да и вообще для любой другой ветки) в git ты легко с помощью ci сервера + docker можешь поднимать сайт c последними обновлениями кода
    - делай это у себя и можешь не боятся, что заказчик сможет забрать твою работы и забыть заплатить
    8. Деплой
    - я просто использую на нужном сервере gitlab-ci-worker и получаю все аналично п.7
    - но для этого использую только ветку prodaction, в которую выкладываю стабильные изменения по готовности
    - просто хостинг - все, что угодно ( shell, ansilbe + ssh ) через ci server
    - И да не забудь что для prodaction надо бы все ассеты по сжимать ( да, да я про ci)
    9 Be happy
    Выкинь рутину, и делай то что тебе нравится. Пиши код))

    P.S.
    Это не наставление как надо работать, не реклама инструментов. Это описание моего workflow.
    Ответ написан
    8 комментариев
  • Как сделать многоуровневый JSON с помощью PHP и MySQL?

    @mib
    SELECT 
              DATE_FORMAT(`date`, '%Y-%m') AS months, 
              `manager_name`, 
              COUNT(`manager_name`) AS deal_count, 
              SUM(`sale_total`) AS sale_sum
    FROM `manager_sales`
    GROUP BY  DATE_FORMAT(`date`, '%Y-%m'), `manager_name`
    ORDER BY `date`,  `manager_name`

    Получатся почти необходимые строки
    Останется только набить массив и сделать json_encode
    Ответ написан
    Комментировать