实时在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声明某个静态路径时,它被解释为非代码路径。因此,该路径中的所有文件都不能通过在require
或include
的PHP环境上运行的脚本访问,并且它们不会显示在部署的代码调试器中。
由于这个原因,我已经将所有静态文件放在一个子文件夹(www
)中,而非静态文件放在另一个子文件夹下的PHP脚本中作为required
。