Вирішення проблем

Вирішення проблем

Налаштування проекту також передбачає наявність правильних інструментів для налагодження. На щастя, багато хороших помічників уже включено в пакет webapp.

Дослідження інструментів налагодження Symfony

Почнемо з того, що Symfony Profiler заощаджує час, коли вам потрібно знайти першопричину проблеми.

Якщо ви поглянете на головну сторінку, ви побачите панель інструментів у нижній частині екрана:

/

Перше, що ви можете помітити, це 404 червоного кольору. Пам'ятайте, що ця сторінка є "заглушкою", оскільки ми ще не визначили головну сторінку. Навіть якщо сторінка за замовчуванням, яка вітає вас, прекрасна, це все-таки сторінка помилки. Отже, правильний код статусу HTTP — 404, а не 200. Завдяки панелі інструментів веб-налагодження ви одразу отримуєте цю інформацію.

Якщо ви натиснете на маленький знак оклику, то побачите "справжнє" повідомлення про виняток, як частину запису у журналі профілювальника Symfony. Якщо ви хочете побачити трасування стеку, натисніть на посилання "Exception" у меню зліва.

Щоразу, коли виникає проблема з вашим кодом, ви побачите сторінку винятку, як показано нижче, яка дає вам все необхідне, щоб зрозуміти проблему і те, звідки вона походить:

//

Знайдіть трохи часу, щоб ознайомитися з інформацією, що надає профайлер Symfony, натискаючи по різних посиланнях.

Журнали також дуже корисні в сеансах налагодження. Symfony має зручну команду для відстеження останніх записів всіх журналів (з веб-сервера, PHP і вашого застосунку):

1
$ symfony server:log

Проведімо маленький експеримент. Відкрийте public/index.php і зламайте там PHP-код (додайте foobar в середину коду, наприклад). Оновіть сторінку в браузері та спостерігайте за потоком журналу:

1
2
Dec 21 10:04:59 |DEBUG| PHP    PHP Parse error:  syntax error, unexpected 'use' (T_USE) in public/index.php on line 5 path="/usr/bin/php7.42" php="7.42.0"
Dec 21 10:04:59 |ERROR| SERVER GET  (500) / ip="127.0.0.1"

Вихідні дані мають яскраве забарвлення, щоб привернути вашу увагу до помилок.

Розуміння середовищ Symfony

Оскільки Symfony Profiler корисний лише під час розробки, ми хочемо уникнути його встановлення у продакшн. За замовчуванням Symfony автоматично встановив його лише для середовищ dev та test.

Symfony підтримує поняття середовища. За замовчуванням, є вбудована підтримка трьох: dev, prod та test, але ви можете додати скільки завгодно. Усі середовища використовують той самий код, але представляють різні конфігурації.

Наприклад, усі інструменти налагодження включені в середовищі dev. У prod застосунок оптимізований для максимальної продуктивності.

Перехід від одного середовища до іншого можна здійснити, змінивши змінну середовища APP_ENV.

Коли ви розгорнули у Platform.sh, середовище (зберігається в APP_ENV) було автоматично перемкнене на prod.

Управління конфігураціями середовища

APP_ENV можна встановити, використовуючи "реальні" змінні середовища у вашому терміналі:

1
$ export APP_ENV=dev

Використання реальних змінних середовища є кращим способом для встановлення таких значень, як APP_ENV на продакшн-серверах. Але у середовищі для розробки, необхідність встановлення великої кількості змінних середовища може бути занадто громіздким рішенням. Натомість їх можна визначити у файлі .env

Актуальний файл .env було згенеровано автоматично, під час створення проекту:

.env
1
2
3
4
5
6
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=c2927f273163f7225a358e3a1bbbed8a
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
### symfony/framework-bundle ###

Tip

Будь-який пакет може додати до цього файлу більше змінних середовища завдяки рецепту, який використовує Symfony Flex.

Файл .env зафіксований у репозиторії та описує значення за замовчуванням з продакшн. Ви можете перевизначити ці значення, створивши файл .env.local. Цей файл не повинен відстежуватися, тому він ігнорується, що зазначено у файлі .gitignore.

Ніколи не зберігайте в цих файлах таємні чи чутливі значення. Ми побачимо, як керувати конфіденційними даними на іншому кроці.

Налаштування IDE

У середовищі розробки, при виникненні винятку, Symfony відображає сторінку з повідомленням про виняток та трасування його стеку. При відображенні шляху до файлу, він додає посилання, яке відкриває файл на потрібному рядку у вашому улюбленому IDE. Щоб скористатися цією функцією, необхідно налаштувати IDE. Symfony підтримує безліч IDE з коробки; я використовую Visual Studio Code для цього проекту:

1
2
3
4
5
6
7
--- a/php.ini
+++ b/php.ini
@@ -6,3 +6,4 @@ max_execution_time=30
 session.use_strict_mode=On
 realpath_cache_ttl=3600
 zend.detect_unicode=Off
+xdebug.file_link_format=vscode://file/%f:%l

Зв'язування файлів не обмежуються лише винятками. Наприклад, контролер на панелі інструментів веб-налагодження, також, стає доступним для натискання після налаштування IDE.

Налагодження у продакшн

Налагодження продакшн-серверів завжди складніше. Наприклад, у вас немає доступу до профілювальника Symfony. Журнали менш детальні. Але перегляд останніх записів, все ж, можливий:

1
$ symfony cloud:logs --tail

Ви навіть можете підключитися до веб-контейнеру через SSH:

1
$ symfony cloud:ssh

Не хвилюйтеся, досить не легко буде щось зламати. Більша частина файлової системи доступна лише для читання. Ви не зможете вносити "гарячі" зміни безпосередньо в продакшн. Але ви дізнаєтеся набагато кращий спосіб, пізніше, у цій книзі.

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.