Подтвердить что ты не робот

Работает среда Symfony2, среда prod дает ошибку 404

Недавно я успешно установил 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 [] []

4b9b3361

Ответ 1

Вы включили производственную среду и очистили кеш? Запустите консоль и сделайте следующее:

app/console --env=prod cache:clear

Ответ 2

Я думаю, что у меня была аналогичная проблема. Я считаю, что разогрев кеша решил мой экземпляр, если он.

php app/console cache:warmup --env=prod --no-debug

Ответ 3

Недавно установив 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 против жесткого кэширования продукции.

Ответ 4

Я удивлен, что вам никто не сказал: у вас нет маршрута для/в среде prod.

напишите это в app/config/routing.yml

  _welcome:
 pattern:  /
 defaults: { _controller: AcmeDemoBundle:Welcome:index }

Ответ 5

Вам нужно установить APC для вашего локального сервера, и все будет работать в prod-мод для вас. Также попробуйте нажать правильную базу данных в параметрах .yml, потому что dev добавляет DATABASENAME_dev.

Ответ 6

Я попробовал решение, которое @gilden дал в своем комментарии; он работает.

Я побежал php bin/console cache:clear --env=prod вместо rm -rf app/cache/*.

Ответ 7

Сегодня у меня была одна и та же проблема и я попробовал различные решения. До тех пор, пока я не вспомнил, что важно, чтобы служба apache mod_rewrite была включена. Для этого выполните следующую команду (на Ubuntu)

sudo a2enmod rewrite

И затем перезапустите сервер

sudo service apache2 restart

Я надеюсь, что кто-то может быть полезным. Привет!

Ответ 8

Моя папка кеша symfony не была доступна для записи. Он работал, когда я сделал полный каталог кеша и его файлы доступными для записи.

sudo chmod -R 777 .

Ответ 9

(Аггера эсто dentro del archivo routing_dev.yml) Добавьте это в routing_dev.yml

_wellcome:
    pattern: /
    defaults: { _controller:AppBundle:Default:index }