Недавно я успешно установил Symfony2 на свою машину.
Я могу получить доступ к http:/localhost/app_dev.php
(среда dev)
Однако, когда я пытаюсь получить доступ к среде prod:
http:/localhost/app.php
Я получаю следующее сообщение об ошибке в браузере:
К сожалению! Произошла ошибка
Сервер вернул «404 Not Found». Что-то сломалось. Отправьте нам электронное письмо по электронной почте и сообщите нам, что вы делали, когда произошла эта ошибка. Мы исправим его как можно скорее. Извините за причиненные неудобства.
Я проверил очевидное: файл app.php существует в той же папке, что и app_dev.php, поэтому я не знаю, что вызывает это.
У кого-нибудь есть решение исправить это?
[[Редактировать]]
Я очистил кеш, набрав: sudo php app/console cache:clear env=prod no-debug
как рекомендовано. Теперь я получаю пустой экран. Беспокойно, что в app / logs / prod.log нет сообщений об ошибках, поэтому я не получил ни малейшего представления о том, что не так (prod-среда все еще работает нормально).
Содержимое моего файла app / config / routing.yml:
### fos routing, remove later fos_user_security: resource: "@FOSUserBundle/Resources/config/routing/security.xml" fos_user_profile: resource: "@FOSUserBundle/Resources/config/routing/profile.xml" prefix: /profile fos_user_register: resource: "@FOSUserBundle/Resources/config/routing/registration.xml" prefix: /register fos_user_resetting: resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" prefix: /resetting fos_user_change_password: resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" prefix: /profile ### # Internal routing configuration to handle ESI #_internal: # resource: "@FrameworkBundle/Resources/config/routing/internal.xml" # prefix: /_internal
Вот мой файл app / config / routing_dev.yml
_welcome: pattern: / defaults: { _controller: AcmeDemoBundle:Welcome:index } _demo_secured: resource: "@AcmeDemoBundle/Controller/SecuredController.php" type: annotation _demo: resource: "@AcmeDemoBundle/Controller/DemoController.php" type: annotation prefix: /demo _assetic: resource: . type: assetic _wdt: resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" prefix: /_wdt _profiler: resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" prefix: /_profiler _configurator: resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml" prefix: /_configurator _main: resource: routing.yml
Я просто заметил, что у меня нет routing_prod.yml **
(звонит колокольчик) – Symfony2 не поставляется с файлом конфигурации маршрутизации производства?
Содержимое моего конфигурационного файла Apache показано ниже:
NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /path/to/symfony/web ServerName localhost # Custom log file Loglevel warn ErrorLog /path/localhost.error.log CustomLog /path/localhost.access.log combined <Directory /path/to/symfony/web> AllowOverride None RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] </Directory> </VirtualHost>
[[Дальнейшие подробности]]
Содержимое приложения / logs / prod.log
[2012-08-10 18:10:38] security.INFO: заполненный SecurityContext с анонимным токеном [] [] [2012-08-10 18:10:38] request.ERROR: Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException: маршрут не найден для «GET /» (неперехваченное исключение) в /path/to/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php line 83 [] []
Вы включили производственную среду и очистили кеш? Запустите консоль и выполните следующие действия:
app/console --env=prod cache:clear
Я думаю, что у меня была аналогичная проблема. Я считаю, что разогрев кеша решил мой экземпляр, если он.
php app/console cache:warmup --env=prod --no-debug
Недавно установив Symfony 2.2, я столкнулся с этой проблемой, но на самом деле это нормальное поведение. Значение из коробки Symfony 2.x (на момент написания этой статьи) не поставляется с любыми маршрутами / контентом для производственной среды.
В вашем случае, похоже, вы установили пакет Friends of Symfony, который установил некоторые маршруты на вашем маршруте производства ( routing.yml
), но с первого взгляда ни один из маршрутов, похоже, не нацеливается на корень вашей производственной среды, то есть http:/localhost/app.php/
поэтому ожидается, что 404 ожидается. Я не могу быть полностью уверен, хотя, поскольку он импортирует маршруты, чтобы детали были закрыты. Отличный способ проверить ваши маршруты – прочитать « Визуализация и отладка маршрутов», где вы можете узнать о app/console router:debug
CLI.
routing.yml
– это место по умолчанию для маршрутов в вашей производственной среде (значение routing_prod.yml
– это не вещь). Вы заметите, что routing_dev.yml
импортирует routing.yml
. Это означает, что все, что вы вводите в производство, является (вне коробки) доступным в разработке. Демо-контент, который вы видите, исключительно для среды dev, поэтому вы не видите его в процессе производства. Не стесняйтесь перемещать некоторые вещи вокруг, чтобы удовлетворить ваши потребности, но, как правило, хорошая идея для разработчиков импортировать продукцию, но не наоборот.
Каждый раз, когда вы хотите проверить изменения в своей продукции, вы захотите очистить свой кеш, как рекомендует @tolgap. Производственная среда сильно опирается на предварительно скомпилированный кеш, так что команда заставит ваш производственный кеш обновляться. Окружающая среда Dev всегда обновляет кеш. Понимание этого имеет решающее значение для работы с Symfony. Хотя книга на Symfony.org – отличная точка входа, она не точно ведет домой этот момент о субтитрах кеширования и рабочего процесса. Я был определенно смущен в течение минуты, прежде чем понял взаимосвязь между routing.yml
и routing_dev.yml
и мягким кэшированием dev по сравнению с жестким кэшированием продукции.
Я удивлен, что никто не сказал вам: у вас нет маршрута для / в среде prod.
напишите это в app / config / routing.yml
_welcome: pattern: / defaults: { _controller: AcmeDemoBundle:Welcome:index }
Вам необходимо установить APC для вашего локального сервера, и все будет работать в prod mod для вас. Также попробуйте нажать правильную базу данных в параметрах.yml, потому что dev добавляет DATABASENAME_dev.
Я попробовал решение, которое @gilden дал в его комментарии; оно работает.
Я запустил php bin/console cache:clear --env=prod
вместо rm -rf app/cache/*
.
Сегодня у меня была такая же проблема, и я попробовал различные решения. До тех пор, пока я не вспомнил, что важно, чтобы служба apache mod_rewrite была включена. Для этого выполните следующую команду (на Ubuntu)
sudo a2enmod rewrite
Затем перезапустите сервер
sudo service apache2 restart
Я надеюсь, что кто-то может быть полезным. С уважением!
Моя папка с кешем Symfony не была доступна для записи. Он работал, когда я сделал полный каталог кеша и его файлы доступными для записи.
sudo chmod -R 777 .
(Agrega esto dentro del archivo routing_dev.yml) Добавьте это в routing_dev.yml
_wellcome: pattern: / defaults: { _controller:AppBundle:Default:index }