我正在尝试使用 php-sdk-gae 中的 hello world 示例包运行 symfony2。
我正在按照 https://developers.google.com/appengine/docs/php/ 中提供的说明进行操作我可以使用开发 Controller 运行演示(即:配置 app.yaml 如下:
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
它工作正常,在运行服务器并加载/hello/World 页面后我能够得到一个 Hello World
但是当我尝试使用生产 Controller (app.php 而不是 app_dev.php)运行它时,我得到一个内部服务器错误。
Request URL:http://mysite.local:8080/hello/World
Request Method:GET
Status Code:500 Internal Server Error
唯一的线索是在我启动服务器的控制台窗口中,显示这些行 ...
ERROR:root:php failure (255) with:
Status: 500 Internal Server Error
X-Powered-By: PHP/5.4.15
Content-type: text/html
如果我对 app.php 文件进行了一些更改,我意识到它可以在以下 AppKernel 加载行中正常工作:
$kernel = new AppKernel('prod', true);
$kernel = new AppKernel('dev', false);
$kernel = new AppKernel('dev', true);
但不适用于生产环境的默认配置 ('prod',false)。
我正在使用以下命令启动 GAE 服务器: google_appengine/dev_appserver.py --php_executable_path=/home/jon/php-sdk-gae/php-5.4.15/installdir/bin/php-cgi helloWorld/
我是 GAE 的新手,我想知道在哪里可以找到日志以获取有关此错误的更多信息。
最佳答案
您的生产环境中存在未捕获的异常。这就是 http 500 错误的原因。
让我快速解释一下AppKernel::__construct
$kernel = new AppKernel($environment, $debug);
第一个参数是环境,第二个是调试选项。
如果您将 debug 设置为 true ,symfony 将 try catch 异常并向您展示一个不错的 stracktrace。
这涵盖了您没有收到 http 500 错误(由未捕获的异常引起)的第一种和第三种情况。
$kernel = new AppKernel('prod', true);
$kernel = new AppKernel('dev', true);
现在您声明错误不会在调试设置为 false 的开发环境中抛出。
$kernel = new AppKernel('dev', false);
这意味着在开发环境中没有异常(exception)。
现在您必须检查生产日志文件以找出抛出的异常。
使用 tail -f 在您的 shell(即 bash)中查看对该文件所做的实时更改,或者如果不可用,请在您的编辑器中打开该文件并在末尾查找异常。
tail -f app/logs/prod.log
在 symfony2 标准版日志文件可以在
app/logs/%kernel.environment%.log
... %kernel.environment% 是 dev/prod/test 之一
关于php - 使用 symfony2 设置 php-sdk-gae,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722761/