2013-05-23 9 views
6

Próbuję uruchomić symfony2 przy użyciu przykładowego pakietu hello world wewnątrz php-sdk-gae.Konfigurowanie php-sdk-gae z symfony2

Obserwuję z instrukcjami podanymi w https://developers.google.com/appengine/docs/php/ i mogę uruchomić demo ze sterownikiem rozwoju (tj: konfigurowanie app.yaml następująco:

application: helloworld 
version: 1 
runtime: php 
api_version: 1 

handlers: 
- url: /bundles 
    static_dir: helloWorld/web/bundles 

- url: /favicon.ico 
    static_files: helloWorld/web/favicon.ico 
    upload: helloWorld/web/favicon.ico 

- url: /.* 
    script: helloWorld/web/app_dev.php 

To działa dobrze, a ja jestem w stanie uzyskać Hello Świat po uruchomieniu serwera i obciążenia/hello/World stronę

ale gdy próbuję uruchomić go z kontrolerem produkcji (app.php zamiast app_dev.php), pojawia się błąd wewnętrzny serwera.

Request URL:http://mysite.local:8080/hello/World 
Request Method:GET 
Status Code:500 Internal Server Error 

Jedyną wskazówką jest w oknie konsoli, gdzie uruchomiony serwer, pokazując linie ...

ERROR:root:php failure (255) with: 
Status: 500 Internal Server Error 
X-Powered-By: PHP/5.4.15 
Content-type: text/html 

Gdybym dokonać pewnych zmian w plikach app.php, zdaję sobie sprawę, że to działa dobrze z następujących AppKernel linie załadunku:

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

ale nie z domyślnej konfiguracji w środowisku produkcyjnym dla ('prod', false).

jestem uruchomienie serwera GAE z tym poleceniem: google_appengine/dev_appserver.py --php_executable_path =/home/JON/php-sdk-gae/php-5.4.15/INSTALLDIR/bin/php-cgi helloworld/

Jestem nowy w GAE, i zastanawiam się, gdzie mogę znaleźć logi, aby uzyskać więcej informacji na temat tego błędu.

+0

proszę podać niektóre części aplikacji/logs/prod.log. http 500 powinien być spowodowany przez wyjątek w produkcji ... który? – nifr

+0

której wersji Symfony używasz? – nifr

+0

Używam Symfony 2.2 – jonaguera

Odpowiedz

3

Występuje nieprzechwycony wyjątek w środowisku produkcyjnym. To jest przyczyna błędu http 500.

Pozwól mi szybko wyjaśnić AppKernel::__construct

$kernel = new AppKernel($environment, $debug); 

Pierwszym argumentem jest środowisko, drugi jest opcja debug.

Jeśli ustawisz debugowanie na true, symfony spróbuje przechwycić wyjątki i pokazać ładną ścieżkę.

Obejmuje pierwszy i trzeci przypadek, w którym użytkownik nie otrzymuje błędu http 500 (spowodowanego nieprzechwyconym wyjątkiem).

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

Teraz twierdzisz, że błąd NIE jest zgłaszany w środowisku programisty z ustawionym błędem debugowania.

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

Oznacza to w środowisku dev jest wyjątkiem.

Teraz musisz sprawdzić plik dziennika produkcyjnego, aby dowiedzieć się, który wyjątek został zgłoszony.

Użyj komendy tail -f, aby zobaczyć zmiany na żywo wprowadzone do tego pliku w powłoce (np. Bash) lub jeśli nie są dostępne, otwórz plik w edytorze i poszukaj wyjątków na końcu.

tail -f app/logs/prod.log 

W Symfony2 standardowych logów Edition można znaleźć na

app/logs/%kernel.environment%.log 

... z% kernel.environment% jest jednym z dev/prod/test

+0

Próbowałem nurkować w tych dziennikach (logs/prod.log & logs/dev.log), ale gdy wymuszam błąd, nie ma linii w prod.log Kiedy Uruchamiam jądro w trybie dewelopera, w dev.log jest kilka wierszy, ale nie ma linii błędów, ponieważ nie ma błędu w środowisku dev. Pokazuje "Hello World!" wiadomość z powodzeniem. Podejrzewam, że istnieje pewne działanie w środowisku produkcyjnym, którego nie można wykonać przy użyciu GAE (coś takiego jak buforowanie plików lub takich rzeczy). – jonaguera

+0

Upewnij się, że twoja trasa wychodzi z Hello World! jest nie tylko skonfigurowany w routing_dev.yml - czy możesz to potwierdzić? – nifr

+0

Mogę to potwierdzić. Jest w routing.yml. Działa z konfiguracją AppKernel ("prod", true), ale nie z AppKernel ("prod", false) – jonaguera

1

Problem jest związany z . Htaccess plik dostarczany z Symfony 2.2

Mogę bez problemu używać aplikacji w Symfony 2.0, a mój aplikat jon z Symfony 2.2 działa również, jeśli zastąpię plik web/.htaccess dostarczony wraz z Symfony 2.2, dostarczony z Symfony 2.0

Być może jest to coś związanego ze zmianą wprowadzoną w celu uniknięcia powielania treści (/app.php/coś i/coś), ponieważ od Symfony 2.2, /app.php przekierowuje (301) żądanie.

0

Uważam, że problemem jest brak wsparcia zapisu w systemie plików narzuconym przez GAE. Symfony zdaje się również polegać na funkcji tempnam(), która jest wyłączona w wersjach niższych niż 1.9.18, która nie jest dostępna publicznie w chwili, gdy to piszę.