2011-07-22 18 views
55

Pobrałem symfony2 i mogę uruchomić go począwszy od app_dev.php.symfony2 - jak przejść z "dev" do "prod"?

Ale kiedy zacznę od app.php, a następnie pojawia się strona błędu 404.

app.php chociaż jest oczywiście i to zostanie wykonany.

Błąd dzieje widocznie gdzieś po ostatniej linii kodu w app.php:

$kernel->handle(Request::createFromGlobals())->send(); 

Chyba nie jest przełącznik gdzieś muszę skonfigurować.

EDIT:

Jak sugeruje Gelo I dodaje routing do wersji produkcyjnej do app/config/routing.yml.

_welcome: 
    resource: "@AcmeDemoBundle/Resources/config/routing.yml" 
    prefix: /

stworzyłem src/Acme/DemoBundle/Resources/config/routing.yml o treści:

bla: 
    pattern:/
    defaults: {_controller:AcmeDemoBundle:Demo:index} 

W DemoController::indexAction() umieściłem die(__FILE__);

nic; Nadal dostaję 404 z app.php!?

EDIT dotyczące odpowiedź:

./app/console --env=prod cache:clear 

załatwiło sprawę. pamiętaj o parametrze env.

Odpowiedz

39

Domyślnie Symfony 2 jest dostarczane z pakietem demonstracyjnym, który jest dostępny tylko ze środowiska programistycznego.

Środowisko produkcyjne nie zawiera żadnej trasy, więc normalne jest wyświetlenie strony błędu 404.

EDIT:

Czy na pewno Twój pakiet jest umożliwienie w AppKernel.php?

Jeśli tak, wyczyścić pamięć podręczną za pomocą następującego polecenia: ./app/console cache:clear

Sprawdź, czy trasa jest umożliwienie za pomocą następującego polecenia: ./app/console router:debug

+0

oh ... Nie sprawdziłem tego. Sądzę, że oba konfiguracje są symetryczne, z wyjątkiem obsługi błędów i tego typu rzeczy. – Raffael

+0

proszę spojrzeć na moją edycję. dzięki – Raffael

+0

Jeszcze raz dziękuję, właściwie to śledziłem to do tej pory i usunąłem ten pakiet z appkernel i używam teraz nowego routingu. proszę spojrzeć na moją ostatnią edycję. – Raffael

-10

Twój problem jest związany z pamięci podręcznej Symfony2. Miałem te same problemy. Spróbuj tego:

  • sudo php app/console cache:clear --env=prod --no-debug
  • sudo chmod 777 -R ../sf2/ (SF2) jest głównym katalogu mojego Proyect

skończysz.

+0

Uratujesz mój dzień !!!!!!! –

+40

'chmod 777 -R' naprawdę? NIE ZRÓB TO, TO ZAGROŻENIE BEZPIECZEŃSTWA. –

+3

To jest samobójstwo. Przynajmniej powiedz mu, aby zrobił "chmod -R 777 app/cache app/logs" zamiast całej rzeczy, ale tylko do debugowania w dev, gdy nic nie działa. – ChocoDeveloper

1

Naprawiłem to, pozwalając, aby konto serwera internetowego (tj. "Master-chef" było właścicielem katalogu/Symfony2/app/cache/prod.Polecenie, jak poniżej:

$sudo chown master-chef -R /var/www/Symfony2/app/cache/prod 
7

Zamiast tego zmień właściciela.
sudo chown www-data:www-data -R app/cache
sudo chown www-data:www-data -R app/logs

Ów pozwalając przeglądarka właścicielem foldery. składnia jest:
chown <USER>:<GROUP> <SWITCH> <DIRECTORY>

5

Chciałem tylko zintegrować kilka porad dla tego rodzaju problem, ponieważ ja go dzisiaj do czynienia z nową instalacją Symfony2 świeżego.

W świeżej instalacji normalnie dostać AppBundle pod/src/AppBundle wraz z AcmeDemoBundle w/src/Acme/DemoBundle

Jeśli chcesz uruchomić AcmeDemoBundle na app_dev, aw międzyczasie mają aplikację (tj AppBundle wyposażony świeżej instalacji) na app.php (i uniknąć 404) można też zrobić coś takiego:

w /app/config/routing_dev.yml komentarz następujące wiersze (jeśli je masz):

_main: 
    resource: routing.yml 

w /app/config/routing.yml dodać nową trasę (jeśli nie masz)

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

następnie pustą pamięć jak już poinformowany przez innych i przetestować aplikację na


1) http: // your_application_path/web/


2) http: // your_application_path/web/app_dev.php

Jeśli wszystko jest w porządku na pierwszym, należy uzyskać białą stronę z napisem "Strona główna". (aby edytować to w /app/Resources/views/default/index.html.twig ... Układem dla tego jest base.html.twig), a na drugim powinieneś otrzymać pakiet DemoBundle dostarczony przez Symfony2.

Mam nadzieję, że pomoże!

-1

W swojej "web/app.php" pliku

$kernel = new AppKernel('prod', false); 

zmienić wartość na "true".

$kernel = new AppKernel('prod', true); 

Teraz możesz załadować aplikację w trybie produkcji.

+0

Jest to bardzo zła praktyka i nie jest związana z wdrażaniem aplikacji w ogóle. –

+0

@WouterJ Czy możesz mi powiedzieć, dlaczego to jest zła praktyka? Jestem początkującym w Symfony. :-) – tomloprod

+0

@tomloprod debug pokazuje wiele danych, których nie chcesz pokazywać użytkownikom (i potencjalnym hakerom): nazwy plików, informacje o db, szczegółowe komunikaty o błędach, zrzuty itp. Można sobie wyobrazić, że uruchomienie debugowania w prod jest dość niepewne :) –

Powiązane problemy