Warum ist meine Symfony2-Installation 404ing, wenn ich auf app.php zugreife?

Lesezeit: 6 Minuten

Benutzer-Avatar
siwymilek

In Symfony2 funktioniert beim lokalen Zugriff auf meine Anwendung über app_dev.php alles einwandfrei. Wenn ich jedoch auf app.php zugreife, kommt es zu 404s:

Hoppla! Ein Fehler ist aufgetreten

Der Server hat “404 Not Found” zurückgegeben.

Etwas ist kaputt. Bitte senden Sie uns eine E-Mail an [email] und teilen Sie uns mit, was Sie getan haben, als dieser Fehler auftrat. Wir werden es so schnell wie möglich beheben. Entschuldigung für

  • mögliches Duplikat von symfony2 – wie wechselt man von “dev” zu “prod”?

    – Markus Biek

    9. August 2011 um 14:43 Uhr

  • Ja, es ist ein mögliches Duplikat, aber die Antworten auf diese Frage (insbesondere Misbah) haben mir viel mehr geholfen als der andere Container in “symfony2 – how to switch from ‘dev’ to ‘prod'”, also denke ich, dass diese Frage ( und Antworten) sollten hier aufbewahrt werden.

    – Lorenzo Marcon

    4. Dezember 2011 um 11:25 Uhr

Eine frische Installation von Symfony 2 enthält kein Routing für die Produktionsumgebung. Wenn du mal drunter schaust app/config/routing_dev.yml, werden Sie feststellen, dass alle Routen, die Sie in der Demoanwendung sehen, nur für die Entwicklung definiert sind. Wenn Sie die Demo auf testen möchten app.phpmüssen Sie zuerst das Routing kopieren routing_dev.yml zu routing.ymlund aktivieren Sie auch die AcmeDemoBundle unter dir AppKernel.php:

$bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
+       new Acme\DemoBundle\AcmeDemoBundle()
    }

if (in_array($this->getEnvironment(), array('dev', 'test'))) {
-       $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    } 

(+ ist die Zeile, die Sie hinzufügen sollten, – ist die Zeile, die Sie entfernen sollten)

Ich hatte das gleiche Problem und habe gerade den Cache geleert. php app/console cache:clear --env=prod Dies hat mein Problem gelöst.

Setzen Sie das Attribut nicht auf true: $ kernel = new AppKernel ('prod', TRUE); Es aktiviert den Debug-Modus und wird für das Produkt nicht empfohlen.

Benutzer-Avatar
Raffael

Hatte das gleiche Problem.

tatsächlich könnte es mehrere Probleme geben. Sie müssen den Cache jedoch mit dem Konsolenbefehl löschen, da Symfony Routen, Vorlagen und Konfigurationen zwischenspeichert.

  • Ich vergesse immer, dass Sie den Cache für die Prod-Umgebung (oder jede Nicht-Debug-Umgebung) manuell löschen müssen.

    – Andreas

    28. Januar 2013 um 16:33 Uhr

Benutzer-Avatar
CodeGodie

Dies ist normales Symfony-Caching, das seine Arbeit erledigt. Alle Änderungen, die Sie vornehmen, werden live in app_dev.php (Entwicklungsumgebung) angezeigt/getestet, aber nicht in app.php (Produktionsumgebung), da dort alles zwischengespeichert wird.

Ich folge einer einfachen Regel, die funktioniert. Jedes Mal, wenn ich etwas aktualisiere app\config\routing.yml (oder wirklich jede Änderung) und ich möchte es in der Produktion sehen, das müssen Sie LÖSCHEN SIE DEN CACHE indem Sie den folgenden Konsolenbefehl ausführen:

Symfony 2.*: php app/console cache:clear --env=prod

Symfony 3.*: php bin/console cache:clear --env=prod

Versuchen Sie nun, die Seite in Ihrem Browser neu zu laden, und Sie werden sehen, dass es funktioniert.

Benutzer-Avatar
Hackohackob

Okay, ich hatte das gleiche Problem und das Leeren des Caches hat es nicht gelöst. Nachdem ich eine Stunde lang Posts gelesen habe, in denen jeder “Cache leeren” sagt, habe ich beschlossen, wirklich zu verstehen, was los ist. Also werde ich versuchen, es anderen Leuten wie mir (die gerade erst angefangen haben) zu erklären. Ich hoffe, ich liege nicht falsch und wenn ja, korrigiert mich bitte.

Ich gehe davon aus, dass Sie dem Tutorial des Buches folgen, wo Sie haben Acme/DemoBundle. Und wenn Sie von der Produktionsumgebung aus darauf zugreifen, erhalten Sie 404. Zunächst einmal sollten Sie ein klares Verständnis dafür haben, was Bundle in Symfony bedeutet. Es ist so etwas wie ein Plugin. Es ist wie ein Puzzle. Symfony ist wie ein großes Puzzle und Ihre App ist ein Teil des Puzzles.

Schauen wir also zuerst in die AppKernel.php Datei in ./app. Was wir dort sehen, ist die Registrierung von Bündeln. Als würde man die Puzzleteile zusammensetzen. Und zuerst sagen wir „okay, ich will die Hauptteile des Puzzles, die Symfony-Bundles“ und dann sagen wir „und wenn ich im Debug-Modus bin, will ich auch noch ein paar andere Teile.“ Und da ist dein Stück, dein Bündel. Aus diesem Grund können Sie von der Produktionsumgebung aus nicht darauf zugreifen. Sie registrieren das Bundle nur aus der Entwicklerumgebung. Registrieren Sie Ihr Paket (Acme/DemoBundle/AcmeDemoBundle) oben, und Sie können von der Produktionsumgebung aus darauf zugreifen.

Zweitens gehen Sie hinein ./app/config/routing_dev.yml . Dies ist das Routing für die Entwicklungsumgebung. Wir sagen: “Okay, ich habe einige Routing-Informationen drin @AcmeDemoBundle/Resources/config/routing.yml und in der Entwicklungsumgebung ist unser Bundle zu finden. Aber schau rein ./app/config/routing.yml .Wir erwähnen nichts über unser benutzerdefiniertes Routing. Es ist, als wüsste das Framework nichts von der Existenz unserer Routing-Datei. Und das in der Produktionsumgebung. Fügen Sie also den letzten Teil von hinzu routing_dev.yml zu routing.yml (in ./app/config/) sollte das Problem beheben.

Danach den Cache löschen und prüfen ob /app.php/random/[number] funktioniert. Es sollte sein.

Ich hoffe, dies wird jemandem wie mir helfen, einige der Grundlagen zu verstehen.

Benutzer-Avatar
Misbah

Wenn Sie der Antwort von Anton folgen und immer noch den Fehler erhalten, können Sie den folgenden Weg versuchen

Bei routing.ymlfüge diese Zeilen hinzu (nur)

_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

Fügen Sie diese Zeilen nicht hinzu

_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

Dies ist ein Beispiel für die routing.yml das ich geschrieben habe

# Internal routing configuration to handle ESI
#_internal:
#   resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
#   prefix:   /_internal
_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

Benutzer-Avatar
Olivier Roman

Ich muss Andreas zustimmen.

Das Setzen des zweiten AppKernel auf TRUE ermöglicht nur eine klarere Debug-Meldung (und Sie werden möglicherweise feststellen, dass die Anwendung nicht schneller als erwartet ist).

In meinem Fall wurde mir mitgeteilt, dass ich keine _welcome-Route für die Produktion zur Verfügung habe (dh routing.yml).

Ich musste die folgenden Zeilen hinzufügen, wie von Misbah erwähnt, und andere gängige Verfahren befolgen, um meine Anwendung mit voller Geschwindigkeit zum Laufen zu bringen.

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

1245530cookie-checkWarum ist meine Symfony2-Installation 404ing, wenn ich auf app.php zugreife?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy