Would you like to try reinstalling the package instead

Во время выполнения composer install может произойти пренеприятнейшее извещение:

Would you like to try reinstalling the package instead [yes]?
При вводе yes и ещё некоторых сообщениях может случиться ошибка:
[RuntimeException]
Source directory has unpushed changes on the current branch
Хорошего решения из коробки для этой проблемы я не нашёл. Однако, есть workaround. (далее…)

Как в docker-compose выполнить комманду с пайпами и перенаправлением вывода

Когда лень входить в терминал контейнера, а выполнить какие-то действия в нём нужно, то можно воспользоваться лайфхаком и запустить команду через вызов docker-compose exec:

docker-compose exec -u appuser appcontainer command args --options=values
Однако, если логика вашей команды подразумевает конвейерную обработку или запись вывода команды в файл внутри контейнера, то подобные команды будут выдавать ошибки:
docker-compose exec appcontainer echo 'something' | worker
Выведет:
bash: php: command not found
(далее…)

Как в docker-compose exec разово задать переменную окружения

Тоже достаточно повседневная задача — выполнить какую-либо команду в bash разово задав переменную окружения меняющую поведение данной команды. Например, в командной строке это может выглядеть так:

SYMFONY_ENV=prod composer install --no-dev
Однако, если выполнить это через docker-compose exec
docker-compose exec -u app php SYMFONY_ENV=prod composer install --no-dev
возникнет ошибка: (далее…)

Как в Symfony 3.4 принудительно закрыть соединение с MySQL

Достаточно частая ситуация, когда скрипт закончил всю работу с базой и переходит к какой-то длительной обработке данных. В такой ситуации соединение с БД остаётся открытым, но никто им не пользуется, в результате чего при большой нагрузке другие клиенты могут получить ошибку:

MySQL: ERROR 1040: Too many connections
Незадачливый амин или разработчик моментально предложит увеличить количество соединений. Но будет ли это хорошим решением? Не всегда. (далее…)

Работа с build arguments в docker-compose и Dockerfile

Как только вы сталкиваетесь с разворачиванием одного проекта на несколько окружений, моментально возникает необходимость использовать аргументы для сборки docker-контейнеров. Например, для разработки и тестирования нужно использовать одни лицензионные ключи, а для продакшена — другие. К счастью, сообщество Докера это предусмотрела и существует удобное решение этого вопроса. (далее…)

Как в PHP composer подменить пакет на свой репозиторий

По сути это продолжение статьи как сделать git fork из github в bitbucket, т.к. одно из другого крайне бессмысленно. Допустим, есть какая-то хорошая публичная библиотека на github, нов ней есть фатальный недостаток, который автор библитеки не хочет, не может и не будет исправлять. При этом архитектура библиотеки такова, что нельзя просто так взять и отнаследоваться и переопределить поведение. А делать правку в коде и хранить весь этот хардкод в основном репозитории не позволяет здравый смысл. (далее…)

Как сделать git fork из github в bitbucket

Довольно частая задача — сделать форк какой-либо библиотеки с github и разместить её в приватном репозитории в bitbucket, gitlab или ещё где. Чаще всего это нужно в тех ситуациях, когда нужно самостоятельно внести правки в исходную библиотеку, но по каким-то причинам в основной  публичный репозиторий это попасть не должно. Собственно, сперва нужно создать новый пустой реопзиторий, затем склонировать его себе:

git clone git@bitbucket.org:my/forked-repo.git
(далее…)

Создание консольной команды CLI в Symfony 3.4

В отличии от Laravel, в Symfony создание консольных команд доведено до абсурда. Чтобы создать заготовку команды нужно выполнить:

php bin\console generate:command MyBundle command:name
Где нужно указать имя бандла в котором будет создана команда и имя команды, по которому она будет вызываться. Если запустить generate:command без аргументов, то в интерактивном режиме будут запрошены Bundle name и Command name, а затем ещё и подтвердить всё намерение: Do you confirm generation [yes]? После чего будет создана папка src/MyBundle/Command/ (если её ещё нет) и файл в ней: src/MyBundle/Command/CommandNameCommand.php Теперь можно вызвать свою команду так:
php bin\console command:name
(далее…)

Как быстро проверить работоспособность прокси

Как проверить прокси в консоли Linux curl --proxy "user:pass@host:port" https://google.com Такой способ сработает в любом Linux-дистрибутиве с установленной библиотекой Curl. Также этот вариант будет работать в MacOs и даже Windows в cygwin! Однако, может возникнуть ошибка: curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none Если знаете как Read more

Установка New Relic для PHP 7.1 в CentOs 7 в docker-контейнере

Что такое New Relic и зачем он нужен в этой заметке рассказывать не буду. А расскажу лишь кратко как установить newrelic agent внутрь docker-контейнера для мониторинга производительности приложения. Т.е. речь о APM — Application Performance Monitoring and Management. Рассмотрим 2 варианта: установку в уже запущенном контейнере и настройку через Dockerfile. В данной статье рассмотрена только установка APM-агента в образ docker, установка агента для мониторинга инфраструктуры внутри docker сложна и не имеет смысла. Инфраструктурный агент лучше установить в хостовую систему. (далее…)