Как в Linux поменять hostname сервера

По сути hostname сервера носит больше информационный характер и не должен влиять на работу приложений. Если у вас более одного сервера, то стоит задуматься о настройке для каждого уникального и понятного имени хоста. Например, server1.evilinside.ru, server2.evilinside.ru и т.п. Однако, если серверов очень много, то можно группировать их по странам, дата-центрам или назначению. […]

Валидация объектов и их свойств в Symfony 3.4

В Symfony есть встроенные валидаторы данных. Окей, а вы уверены что они работают и валидируют по всем правилам? Столкнулся с ситуацией, в которой валидароты скипали правила описанные в аннотациях объектов. Давайте покажу на примере. Допустим есть класс с пропертями, геттерами и сеттерами, т.е. типичный Data Transfer Object (DTO). // src/Entity/Author.php namespace […]

Продвинутая работа с grep и awk: сумма и группировка строк

Любите грепать логи? Я тоже.Но просто грепать иногда не достаточно. Наверняка многие из вас уже познали основы работы с AWK и уже умеют выводить только интересующие столбцы: cat *.log | grep -v challenge | awk ‘{print $5, $3}’ А можно ли посчитать сумму по отфильтрованным полям? Можно! cat *.log | […]

security.INFO: Populated the TokenStorage with an anonymous Token.

Продолжая изучать файл prod.log, можно заметить ещё одно странное сообщение: security.INFO: Populated the TokenStorage with an anonymous Token. Это сообщение генерируется в файле vendor\symfony\symfony\src\Symfony\Component\Security\Http\Firewall\AnonymousAuthenticationListener.php

The service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0.

Иногда полезно заглядывать в файл prod.log вашего Symfony приложения, чтобы понимать что в нём происходит во время выполнения. Иногда там можно видеть странные вещи, например: php.INFO: User Deprecated: The service is private, checking for its existence is deprecated since Symfony 3.2 and will fail in 4.0. {«exception»:»[object] (ErrorException(code: 0): User […]

Что такое бандл (bundle)

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

Подзапросы в Symfony

Вероятно, вы знаете о том, что при вызове метода HttpKernel::handle() вторым параметром идёт аргумент типа запроса — $type: public function handle( Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true ) { … }

Обработка исключений в Symfony 3.4

Не исключено, что в процессе долгого путешествия от запроса до ответа, возникнет та или иная ошибка. По умолчанию, ядро проинструктировано перехватывать любое исключение и даже после этого оно пытается подобрать подходящий для него ответ Response. Как мы уже видели, обработка каждого запроса обёрнута в блок try/catch:

События Symfony, приводящие к ответу

Метод handleRaw() класса HttpKernel — это замечательный пример кода, анализируя который, становится ясно, что алгоритм обработки запроса сам по себе не является детерминированным (т.е. допускает отклонения и изменения в процессе). Это означает, что у вас есть несколько различных способов для внедрения в этот процесс, путём которого вы можете полностью заменить или частично модифицировать ответ […]

Файловая система TxFS с поддержкой ACID-транзакций

Группа исследователей из Техасского университета в Остине разработала новую файловую систему TxFS, предоставляющую встроенную поддержку транзакций, удовлетворяющих требованиям ACID (атомарность, согласованность, изолированность, надежность). Код ФС доступен только в виде модифицированных исходных текстов ядра Linux 3.18, патчей для других версий пока нет. TxFS даёт возможность выполнить атомарное применение сразу группы операций над файлами. Например, в […]