实时在Google App Engine上404,同时在本地SDK服务器上工作

实时在Google App Engine上404,同时在本地SDK服务器上工作

问题描述:

我已经在GAE标准环境中部署了几个PHP应用程序,所有工作都很好。实时在Google App Engine上404,同时在本地SDK服务器上工作

现在我正在部署一个新应用程序,该应用程序在gcloud SDK提供的本地服务器上按预期工作(终端命令:dev_appserver.py --log_level=warning app.yaml)。

的问题是,当我把它部署到GAE直播服务(gcloud app deploy app.yaml --project myapp),我得到一个404错误消息:

The page could not be found 

No web page found for the web address: xxx 
HTTP ERROR 404 

的app.yaml中看起来是这样的:

runtime: php55 
api_version: 1 
threadsafe: true 

skip_files: 
- README.md 
- package.json 

handlers: 

- url: /(.*\.html) 
    script: mod_rewrite.php 
    secure: always 

- url: /(.*\..{2,}) 
    static_files: \1 
    upload: (.*\..{2,}) 
    secure: always 

- url: /.* 
    script: mod_rewrite.php 
    secure: always 

我也尝试添加指向特定文件的测试处理程序:

- url: /(mytest\.html) 
    static_files: \1 
    upload: mytest.html 
    secure: always 

以这种方式,我wa能够达到的网址。但就是这样。任何其他网址是404.

有趣的是,在当前部署版本的GAE应用程序的Versions选项卡上,它声明应用程序是0 B,即使它没有以前的版本,但它应该是大约30 Mb。部署时,所有988个文件似乎都已上传,也是因为我的网络连接速度较慢,所以需要一段时间。

在成功完成本教程后,我试图将整个项目重新部署到一个新项目,但仍然遇到同样的问题。

您也可以使用application_readable处理程序选项在应用程序代码中包含相应的静态文件。从Handlers element

application_readable

可选。布尔。默认情况下,在静态文件处理程序 中声明的文件将作为静态数据上传,并仅供最终用户使用。他们 不能被应用程序读取。如果此字段设置为true,则 文件也将作为代码数据上传,以便您的应用程序可以读取它们的 。这两种上传都是针对您的代码和静态数据收取的 存储resource quotas

像这样:

- url: /(.*\..{2,}) 
    static_files: \1 
    upload: (.*\..{2,}) 
    application_readable: true 
    secure: always 

经过几个小时的测试,我终于意识到问题所在。

在GAE声明某个静态路径时,它被解释为非代码路径。因此,该路径中的所有文件都不能通过在requireinclude的PHP环境上运行的脚本访问,并且它们不会显示在部署的代码调试器中。

由于这个原因,我已经将所有静态文件放在一个子文件夹(www)中,而非静态文件放在另一个子文件夹下的PHP脚本中作为required