• Как правильно деплоить проект?

    @jumale
    1) Инициатор деплоя: это может быть как гит-хук, так и допустим вызванная вручную команда. Для начала рекомендую не зацикливаться на хуках, а вызывать в ручную. Если деплоите не так часто, то этого будет вполне достаточно и более безопасно.
    2) миграции - это всего лишь sql команды которые меняют бд. Запуск миграций - это то же самое если вручную запустить любой sql клиент у себя на компьютере, присоединиться к бд и начать добавлять/удалять таблицы и столбцы. Я веду к тому, что миграцию на prod сервере можно выполнить и с локальной машины, если миграции будут выполнены с продакшн конфигурацией.
    3) Конфигурация. В случае с .env файлом это можно сделать таким образом:
    - создаем файл .env.dist в котором указываем все переменные которые требуются для приложения, но оставляем значения пустыми
    - комитим .env.dist в репозиторий. Теперь у нас в репозитории есть шаблон по которому мы можем создать .env файл на локальной машине и заполнить значения переменных
    - добавляем .env в .gitignore (если .env уже был закомичен, то надо его сперва удалить и закомитить удаление, иначе .gitignore будет неправильно игнорировать .env)
    - теперь когда .env игнорируется гитом, можно скопировать наш шаблон .env.dist как .env и заполнить значения переменных. Каждый, кто устанавливает этот проект с нуля у себя на машине должен будет сделать то же самое.

    Вообще деплой можно разбить на несколько этапов:
    - инициатор деплоя (любое событие по которому начинается деплой)
    - сборка проекта (подготовка всех файлов в то состояние в котором они должны отправиться на prod сервер и заменить собой текущие файлы на сервере)
    - тестирование проекта (запуск юнит и функциональных тестов, чтобы убедиться что мы заливаем рабочий код)
    - собственно перенос проекта на сервер
    - выполнение post-deployment команд, которые должны быть выполнены когда новые файлы уже на сервере (например миграции и т.п.)
    - интеграционные smoke-тесты (можно оправить GET запросы на ключевые страницы нашего prod сервера и проверить, что в ответах содержится ожидаемый текст или HTML, это делается чисто для того чтобы убедиться, что после деплоя сервер все еще живой и отображает нужные страницы)

    Все эти шаги можно выполнять вручную, а можно автоматизировать (вплоть до полной автоматизации), но я не рекомендую автоматизировать всё и сразу - лучше добавлять автоматизацию аккуратно шаг за шагом, чтобы не наломать дров.

    Для автоматизации сборки и деплоя существует множество инструментов. Большинство из них просто предлагает дополнительный уровень абстракции над низкоуровневыми командами, что позволяет удобнее организовывать сборки больших проектов с множеством шагов и меньше задумываться о деталях. Обычно разработчики используют для любых проектов какой либо один инструмент, с которым они на "ты" - это всегда удобно, не надо учить ничего нового, все шишки уже набиты, все грабли наступлены. Если у разработчика нет опыта с подобными инструментами и проект достаточно простой, то я бы порекомендовал начать с написания простого скрипта на любом удобном языке программирования. В этом случае не придется тратить время на освоение нового фреймворка и в ваших руках будет максимум контроля над процессом.

    У меня нет опыта с ларавел, но для симфони проекта я бы написал приблизительно такой bash скрипт:
    # если Вы деплоите с локальной машины,
    # то как минимум не стоит собирать проект из файлов с которыми Вы работаете в редакторе,
    # потому что там у нас могут быть незакомиченые изменения, локальные настройки
    # и еще много чего, что не должно попасть на prod сервер
    # поэтому проект будем собирать с нуля в отдельной директории, например "build"
    # (которую тоже нужно предварительно добавить в .gitignore)
    
    # очищаем директорию build и заходим в нее
    rm -rf build
    mkdir build
    cd build
    # клонируем наш проект
    git clone git@example.com/user/project . # "." клонирует в текущую директорию
    git checkout master
    # создаем конфиг для prod
    cp .env.dist .env
    # дальше надо заполнить значения переменных в .env файле
    # для начала можно просто поставить скрипт на паузу в этом моменте и заполнить вручную,
    # а в будущем как нибудь автоматизировать этот процесс,
    # например хранить файл с prod конфигами где нибудь на машине
    # и во время сборки копировать их в проект
    
    # устанавливаем вендоры
    composer install
    # прогоняем юнит и функциональные тесты, чтобы убедиться что мы не зальем какой нибудь баг
    vendor/bin/phpunit -c unit.xml
    vendor/bin/phpunit -c functional.xml
    # прогреваем кеш
    bin/console cache:clear --no-warmup --env=prod
    bin/console cache:warmup --env=prod
    
    # выполняем любые другие шаги по подготовке проекта
    # ...
    
    # теперь наш проект готов к заливке на сервер
    # например через scp
    scp -r . <username>@<hostname>:<destination path>
    
    # наконец, можно накатить миграции баз данных
    php app/console doctrine:migrations:migrate --env=prod
    
    # запускаем смок-тесты которые покажут, что деплоймент прошел успешно
    vendor/bin/phpunit -c smoke.xml
    Ответ написан
    Комментировать
  • Клиент на Upwork угрожает международным судом, возможно ли это?

    solotony
    @solotony
    покоряю пик Балмера
    нет никаких международных судов. забей. ответь один раз что готов работать после оплаты, а дальше игнорь его.
    Ответ написан
    Комментировать
  • Это заказчики такие скупые пошли или я чего-то не понимаю?

    Shkuta85
    @Shkuta85
    Просто гряпнул кризис (которого конечно же нет) и взрослые дяди начали экономить. А на чем экономить в первую очередь? В том что меньше всего понимают - IT, в котором и обезьяна разберется. Кинулись в авито, а там сайт за пять минут пару рублей ценой. "Вася ты че мне заливаешь? Какие 50 тыщ? Мне вон настоясчие спецы за гроши сделают." Вася послал, а кушать то охота. Полез Вася за бугор и узнал, что там готовы работу дать. Не знал он правда, что работа на индусов рассчитана... Зато теперь за бугром знают, что есть Вася и предложения о низнозкооплачиваемых заказах можно под русских печатать.
    Настоящая работа не дешевеет, а вот мы...
    Ответ написан
    1 комментарий
  • Как устроена авторизация по паролю в web-приложениях?

    @Vasiliy_M
    Достали советчики, постоянно толкающие слово "сессия" в контексте вопросов об авторизации/аутентификации.
    И то и другое вполне возможно можно реализовать без сессий.
    Сессии вообще для другого придуманы.
    Ответ написан
  • Laravel 5.5 время работы и рендер hello world = ~ 500 мс?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    composer dumpautoload
    php artisan config:cache
    php artisan route:cache
    Ответ написан
    3 комментария
  • Дизайн REST API: Как сейчас принято передавать авторизационный токен?

    @motomac
    В спецификации OAuth 2.0 (если вы его используете) явно указывается формат:

    Authorization: Bearer <token>

    https://tools.ietf.org/html/rfc6749#section-7.1

    Думаю, не лишним будет следовать ему.
    Ответ написан
    Комментировать
  • Создание сайта с функционалом CRM-системы?

    kopyrin
    @kopyrin
    системный администратор, программист,
    Для клиента поставьте Sugar CRM (теперь Suite CRM) на отдельном компьютере. Если оно то что ему подходит по функционалу тогда можно думать дальше что делать. Самому писать или готовое доделывать.
    Ответ написан
    Комментировать
  • Как проанализировать код большого проекта на PHP на наличие неиспользуемых кусков кода и файлов?

    kopyrin
    @kopyrin
    системный администратор, программист,
    Есть еще ряд полезных инструментов, которые могут пригодиться для тестирования качества кода:
    PHPDCD - Dead Code Detector (DCD) для PHP. Он сканирует в PHP проекте все неиспользуемые функции и методы и сообщает о них.
    $ composer global require 'sebastian/phpdcd=*'
    $ sudo ln -s ~/.composer/vendor/bin/phpdcd /usr/local/bin/phpdcd
    Пример проверки:
    project_directory$ phpdcd .
    PHPMD - PHP Mess Detector. Помогает найти в коде потенциальные проблемы, такие как возможные ошибки, субоптимальный код, усложненные выражения, неиспользуемые параметры, методы, свойства.
    $ composer global require 'phpmd/phpmd=2.2.*'
    $ sudo ln -s ~/.composer/vendor/bin/phpmd /usr/local/bin/phpmd
    Пример проверки:
    project_directory$ phpmd . text codesize,unusedcode,naming
    PHP Depend - показывает качество дизайна кода для расширяемости, повторного использования и сопровождения.
    $ composer global require 'pdepend/pdepend=*'
    $ sudo ln -s ~/.composer/vendor/bin/pdepend /usr/local/bin/pdepend
    Пример запуска
    phpDocumentor - инструмент для генерирования документации из PHP кода.
    $ composer global require 'phpdocumentor/phpdocumentor=*'
    $ sudo ln -s ~/.composer/vendor/bin/phpdoc /usr/local/bin/phpdoc
    Пример запуска:
    project_directory$ mkdir docs && phpdoc -d . -t docs
    PHP CodeBrowser - инструмент для создания HTML презентации PHP кода, где выделены участки с выявленными нарушениями по обеспечению качества инструментов, таких как PHP CodeSniffer или PHPMD.
    $ composer global require 'mayflower/php-codebrowser=~1.1'
    $ sudo ln -s ~/.composer/vendor/bin/phpcb /usr/local/bin/phpcb
    Пример запуска:
    project_directory$ mkdir cb && phpcb -s . -o cb
    PHP Copy/Paste Detector (PHPCPD) - инструмент для поиска дублированного кода.
    $ composer global require 'sebastian/phpcpd=*'
    $ sudo ln -s ~/.composer/vendor/bin/phpcpd /usr/local/bin/phpcpd
    Пример проверки:
    project_directory$ phpcpd .
    PHPLOC - инструмент для быстрого измерения размера и анализа структуры PHP проекта.
    $ composer global require 'phploc/phploc=*'
    $ sudo ln -s ~/.composer/vendor/bin/phploc /usr/local/bin/phploc
    Пример проверки:
    project_directory$ phploc --log-xml phploc.xml .
    PHP CodeSniffer - набор из двух PHP инструментов. Основной - phpcs, позволяет выявить нарушения стандартов кодирования в PHP, CSS и JS файлах. И второй - phpcbf, позволяет проводить автоматическую коррекцию стандартов. PHP CodeSniffer является важным инструментом , благодаря которому код остается чистым и последовательным.
    $ composer global require 'squizlabs/php_codesniffer=*'
    $ sudo ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs
    Дополнительная проверка стандарта Symfony2 для PHP CodeSniffer:
    $ cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards
    $ git clone git://github.com/escapestudios/Symfony2-coding-standard.git Symfony2
    $ cd Symfony2
    $ git checkout 2.0.1
    Пример проверки:
    project_directory$ find . -type f -name '*.php' -exec phpcs --standard=Symfony2 '{}' ';'
    Ответ написан
    Комментировать
  • На чём лучше вести локальную разработку?

    boramod
    @boramod
    Упрощенно.

    Вагрант — система управлением конфигурацией конкретной машины.
    Докер — запуск изолированных процессов на машине.

    Докер.
    Это не виртуальная машина, а запуск изолированных процессов. Т.е., запущенный процесс думает, что он один единственный, и ничего вокруг нет. Это работает на уровне ядра Linux. Без использования виртуальных машин.

    В терминологии Докера есть Images и Containers.
    Image — образ, шаблон, на основе которого запускается Container.
    Image строится на основе какого-либо базового образа ОС.

    Container — сервис, запущенный и построенный на базе Image.

    Таким образом, вы можете построить несколько образов, например, образ для Nginx, образ для PHP, образ для MySQL. Вдобавок, вы можете построить несколько образо, для каждой желаемой версии PHP, MySQL и т.п.

    Каждый из этих образов будет иметь у себя в базе какую-либо ОС. Т.е., происходит изолирование окружения, на котором работает Docker.
    На базе построенных образов вы можете запускать Containers, т.е., непосредственно строить рабочее окружение. Каждый запущенный контейнер думает, что он запущен один, в образе наследуемой ОС. Но на самом деле, это всего лишь отдельный процесс, работающий на уровне ядра Linux, без виртуализации. Т.е., у вас нет накладных расходов на виртуальные машины. Изолирование контейнеров выполняется на уровне ядра.

    При всем этом, ваша базовая система остается чиста от устанавливаемых пакетов, свободна от неразберихи с библиотеками, версиями и т.п.

    Оба инструмента хороши. Но у каждого свое назначение.

    Vagrant — великолепный инструмент для конфигурации удаленных машин с нуля, VDS/VPS и т.п.
    Docker — великолепный инструмент для быстрого развертывания/переконфигурации рабочего окружения, практически без изменения системы, на которую он устанавливается.
    Ответ написан
    6 комментариев
  • Как правильно организовать работу team webdev + git?

    @Karmashkin
    может нанять на месяц админа?
    он вам поднимет нормальное окружение:
    - багтрекер с кодревью
    - билдсервер
    - ..далее уже по вкусу
    Ответ написан
    Комментировать
  • Как отправить сообщение с сервера в веб-сокет канал?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    https://github.com/ratchetphp/Pawl - вебсокет-клиент

    Но как мне кажется, лучше для данной задачи подошел бы менеджер очередей.
    Тут хороший пример socketo.me/docs/push
    Ответ написан
    Комментировать
  • Как вернуть мотивацию к обучению?

    При повторной потере мотивации алгоритм следующий:
    1) Идем высыпаемся. По-нормальному так, без будильников. Чтоб глаза вообще больше не закрывались.
    2) Если мотивация не вернулась (возвращается в 70% случаев) - берем велик (хотя можно и пешком) - и на улицу. Если есть приличный парк в городе - находим пару нестандартных физ. упражнений (можно боевых), пытаемся выполнить. Работа с телом и физические нагрузки - это совершенно другая часть вашего сознания, про нее нужно не забывать.
    3) Если мотивация не вернулась (уже где-то 85% случаев) - берем случайную книгу (не техническую), в идеале - из жанра который вам нравится. Читаем. Спокойно, страницы не считаем.
    4) Если не вернулась, повторить с п. 1 до пяти раз, не думая о времени и выполняя только самые важные дела (срочные задачи по учебе, работа, если есть), можно даже попросить родных/знакомых помочь по дому и бытовым делам, чтобы себя разгрузить.
    5) Если не помогло после 5 раз, задаем новый вопрос на тостере, подробно описываем что делали).

    Хотя бы один из п. 1-3 выполняем для профилактики каждый выходной.
    P.S. в принципе плохо сравнивать себя с кем-то - для "сравнения" на свете есть всякие соревнования и состязания, где есть правила и контекст. В жизни правил нет, один учится в MIT, другой учится в колледже в России - какие могут быть сравнения? Вы думаете тут большинство людей за один год все узнало и всего добилось? Вы глубоко заблуждаетесь) PHP-шники-выскочки не в счет, у них искаженное представление о реальности.
    Ответ написан
    11 комментариев
  • Cтоит ли переходить на Laravel 5?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Неправильный вопрос)) Правильный: есть проект на 4.2, решающий такие задачи ...., в 4.2 не устраивает 1, 2, 3, что даст 5.1 при переходе?
    Ответ написан
    2 комментария
  • Как программисты оценивают стоимость своей работы?

    Denormalization
    @Denormalization
    Програмист работает за свою ЗП. Его не волнует сколько заработала\потеряла компания.
    О прибылях\убытках должны думать "эффективные менеджеры", которые и должны получать по шапке.
    Ответ написан
    7 комментариев
  • Минимум для Junior RoR?

    Jeiwan
    @Jeiwan
    Какого-то конкретного списка нету. На одном месте работы могут быть сильно необходимы хорошие знании одного, на другом месте — другого. Серверная веб-разработка огромна. Именно поэтому джуниору необходимо иметь широкий багаж знаний и уметь ориентироваться в новых гемах, технологиях, подходах. Я бы сказал, что самое главное — уметь искать нужную информацию и быстро осваиваться в новом.
    Я считаю, что самый лучший способ научиться разработке на Рельсах и устроиться на работу — пройти курс на www.thinknetica.com/. Но придется попотеть :) Это курс — лучшее, что вообще есть в рунете, да и, наверное, во всём интернете. Не пользоваться такой возможностью просто глупо.

    1) Любые книги по Рельсам и (что тоже крайне важно) Руби.
    2) Подписаться на рассылку rubyweekly.com
    3) Самый заметный признак устаревшего кода — использование старого синтаксиса хешей:
    :a => 1, вместо a: 1 (не считая случаев, когда ключ хеша — не символ).
    Переход с 3 Рельс на 4 не сложен, но зависит от размера приложения и покрытия тестами. Лучше сразу учить 4 (да и 5 уже на подходе).
    Ответ написан
    6 комментариев
  • Планировщик задач?

    Wzhik
    @Wzhik
    fullstack-разработчик
    Простенький такой менеджер задач и таск трекер скрещеный с техникой помидора. Для разработчиков хорошо подходит. Задачи умеет в проекты группировать, статистику считать. pomodorka.ru
    Ответ написан
    1 комментарий
  • Что выбрать, Yii2 или Laravel?

    SamDark
    @SamDark
    Yii2 core team
    Как новичку вам будет очень полезно понять, что у фреймворка внутри и как он работает. Если залезть во внутренности Yii, вы увидите, что там документирован каждый метод, каждый класс, абстракции минимум, всё делается настолько просто, насколько это вообще возможно. Изучить именно как что работает просто.

    Если залезть в Laravel, там всё очень слоёно. Комментариев нет. Чтобы понять, как работает метод нужно частенько пролезть через 3—5 слоёв абстракции в нескольких классах.

    В документации по Laravel, кстати, использован крутой трюк. Описана лишь часть того, что вообще даёт фреймворк. Это делает доку очень компактной, лёгкой и приятной, но за остальным — либо код без комментариев читать, либо Laracasts смотреть.
    Ответ написан
    13 комментариев
  • Есть ли опенсорс аналог таких редакторов как Tilda, ReadyMag и т.п?

    CKeditor + плагиновое API + подключение кастомного CSS + грамотный верстак
    В редакторе, к сожалению, будет не все так, как на экране, но если задаться целью сделать правильно, то будет все похоже на правду.

    С другой стороны вопрос бесплатности должен волновать лишь если совсем нет денег и есть руки или грамотные бесплатные сотоварищи. В любом другом случае верстка подобного лонгрида обойдется куда дороже 1500р (25$ в месяц). Сами в редакции используем оба варианта - на повседневщину - допиленый CKeditor, на эксклюзивы - подписку на Тильду.
    Ответ написан
    Комментировать
  • Как заставить фрилансеров постоянно сотрудничать с компанией?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    Если обобщить всё вышесказанное, то нужен фрилансер на контракт
    Ответ написан
    Комментировать
  • Как заставить фрилансеров постоянно сотрудничать с компанией?

    sim3x
    @sim3x
    Как заставить скупых работодателей писать нормальное ТЗ и выделять бюджеты под это ТЗ?
    Ответ написан
    Комментировать