Ответ 1
Вы включили производственную среду и очистили кеш? Запустите консоль и сделайте следующее:
app/console --env=prod cache:clear
Недавно я успешно установил Symfony2 на свою машину.
Я могу получить доступ к http:/localhost/app_dev.php
(среда dev)
Однако, когда я пытаюсь получить доступ к среде prod:
http:/localhost/app.php
В браузере появляется следующее сообщение об ошибке:
Oops! Произошла ошибка
Сервер вернул "404 Not Found". Что-то сломалось. Отправьте нам электронное письмо по электронной почте и сообщите нам, что вы делали это при возникновении этой ошибки. Мы исправим его, как только возможное. Извините за возможные неудобства.
Я проверил очевидное: файл app.php существует в той же папке, что и app_dev.php, поэтому я не знаю, что вызывает это.
Есть ли у кого-нибудь решение исправить это?
[[Edit]]
Я очистил кеш, набрав: 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 не отправляется с конфигурационным файлом производственной маршрутизации?
Содержимое файла конфигурации My 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 строка 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. Я не могу быть полностью уверен, хотя, поскольку он импортирует маршруты, чтобы детали были закрыты. Отличный способ проверить ваши маршруты - прочитать "Визуализация и отладка маршрутов" , где вы можете узнать о команде CLI app/console router:debug
.
routing.yml
- это место по умолчанию для маршрутов в вашей производственной среде (значение routing_prod.yml
- это не вещь). Вы заметите routing_dev.yml
import 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-мод для вас. Также попробуйте нажать правильную базу данных в параметрах .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 .
(Аггера эсто dentro del archivo routing_dev.yml) Добавьте это в routing_dev.yml
_wellcome:
pattern: /
defaults: { _controller:AppBundle:Default:index }