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