У меня есть приложение, разработанное с помощью Symfony 5, которое отлично работает в моей локальной среде (Vagrant, работающий с Laravel Homestead box), но когда я развертываю его на живом сервере, оно вылетает с пустой белой страницей и отвечает 500 Internal Server Error.
Когда я подключаюсь к серверу по SSH и вручную меняю значение переменной APP_ENV
на dev
с prod
внутри моего файла .env, я вижу ошибку:
Попытка загрузить класс WebProfilerBundle из пространства имен Symfony \ Bundle \ WebProfilerBundle. Вы забыли инструкцию использования для другого пространства имен?
Я использую Github Actions для развертывания своего приложения, и в своем действии я устанавливаю такие зависимости PHP
- name: Install dependencies
run: |
export APP_ENV=prod
composer install --no-dev --optimize-autoloader
Поэтому я не хочу, чтобы на моем производственном сервере зависели только разработки, отсюда и флаг --no-dev
, и, если я правильно понимаю, WebProfilerBundle используется для проверки запроса в процессе разработки, поэтому он имеет отступ для использования только в среде dev
.
Почему Symfony считает, что нужно загрузить этот пакет? Кроме того, я должен был настроить свои пользовательские страницы ошибок для ошибок 404 и 500 (добавление файла bundles/TwigBundle/Exception/error.html.twig
в папку templates
), почему не отображается моя страница пользовательских ошибок? Почему у меня пустая белая страница?
Я подозреваю, что это что-то с тем, как я развертываю (поскольку он работает на моей локальной машине).
Я устал убирать флаги из установки композитора (так что просто запускал composer install
как есть), но это также привело к ошибке.
Вы можете просмотреть мои действия по развертыванию здесь </ а>. Также вот ссылка на репозиторий.
Приложение должно работать в этом домене: https://thebedechkacase.com/
Взгляните на это? stackoverflow.com/questions/58593872/ — person Cooty schedule 23.09.2020
why isn't my custom error page shown?
Просто предположение, но, скорее всего, потому, что эта ошибка возникает до загрузки вашей пользовательской логики страницы. — person Cooty schedule 23.09.2020
Скорее всего, в вашем файле composer.json есть что-то в post-install-cmd
, которое пытается использовать этот класс — person Cooty schedule 23.09.2020
На ум приходят несколько вещей: Во-первых, вам очень важно знать, что полученная вами ошибка не имеет ничего общего с проблемой, с которой вы столкнулись. Вы устанавливаете приложение с флагом —no-dev, и поэтому профилировщик не устанавливается. Когда вы переключаетесь на dev
env, он требуется, но еще не установлен, поэтому возникает ошибка. В вашем случае я предполагаю, что вы пропустили некоторые настройки перезаписи на своем сервере. Взгляните на это: symfony.com/doc/current/setup/web_server_configuration.html Сообщите мне, решит ли это вашу проблему — person Cooty schedule 24.09.2020
@floGalen правильно объясняет, что вызывает это конкретное сообщение об ошибке. Если вы все еще застряли, подумайте о том, чтобы остаться в разработке, просто используя простую «установку композитора». Это может указать вам на настоящую проблему (проблемы) развертывания. Как только проблемы будут решены, вернитесь в исходный рабочий режим. Вы можете просто начать с проверки журналов вашего сервера. — person Cooty schedule 24.09.2020
Проверьте свой
config/bundles.php
и обязательно установитеSymfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true]
. Если я правильно понял, ваше приложение пытается загрузить класс, которого нет в композиторе. Также не забудьте очистить кеш на продукте (php bin/console cache:clear
). Также убедитесь, что на вашем рабочем сервере нет.env.local
файла (илиAPP_ENV
также должен бытьprod
)И комментарий @floGalen, и ответ @Gordy указали мне в правильном направлении, так что спасибо за это. Но точный ответ пришел из чтения руководства Symfony по развертыванию.
Поскольку я не использовал Symfony Flex, мне также нужно было установить для переменной
SYMFONY_ENV
значениеprod
.Вдобавок у меня был мой
.env
в репозитории, который на самом деле был только файлом с данными разработки иAPP_ENV=dev
, настоящий.env
файл был создан во время процессов развертывания на раннере, получая его значение из секретного хранилища Github. Теперь дополнительная проблема заключалась в том, что я сначала проверил свой код в runner, затем запустилcomposer install
, а затем создал рабочий .env (перезаписав тот, который был извлечен из репозитория), поэтомуcomposer install
фактически работал с настройками dev. Чтобы исправить это, я переместил создание моего файла env прямо перед запускомcomposer install --no-dev --optimize-autoloader
, затем также сделалexport SYMFONY_ENV=prod
.Комбинация этих двух решила мою проблему!