【发布时间】:2014-09-12 03:22:07
【问题描述】:
我想在 Google Cloud(基于 Google App Engine GAE 的 Joomla 和 Restler RESTful API 服务器)上创建一个带有子域的网站:
http://api.restlerongooglecloud.com 用于混合应用程序(基于 Restler API,服务于 Android、iOS、Windows Phone 等智能手机)
和
博客:http://joomla.restlerongooglecloud.com(GAE Launcher 上的 Joomla 博客运行良好,我按照此链接中的指南操作:http://forum.joomla .org/viewtopic.php?f=706&t= 828565&p=3114492)
和
http://www.restlerongooglecloud.com 用于主页。
在将实时站点上传到 GAE Cloud 之前,我尝试测试 Restler 是否可以与 Google App Launcher 一起正常工作。
目录结构是
用于 Restler 3.0 RC3 的 GAEproject-root /api/...
GAEproject-root /joomla/ 用于博客
GAEproject-root/app.yaml
我的app.yaml如下:
application: restlerongae
version: 1
runtime: php
api_version: 1
handlers:
## api images
- url: /api/(.*\.(ico$|jpg$|png$|gif$))
static_files: api/\1
upload: api/(.*\.(ico$|jpg$|png$|gif$))
application_readable: true
## api html
- url: /api/(.*\.(htm$|html$|css$|js$))
static_files: api/\1
upload: api/(.*\.(htm$|html$|css$|js$))
application_readable: true
## api test1
- url: /api/(.*)
script: api/public/examples/_001_helloworld/index.php
当我运行网站并指向 Restler 3.0 RC5 示例时:
http://localhost /api/public/examples/_001_helloworld/say/hello 我收到以下错误:
{ "error": { "code": 404, "message": "Not Found" }, "debug": { "source": "Routes.php:359 at route stage", "stages": { "success": [ "get" ], "failure": [ "route", "negotiate", "message" ] } } }
我试图弄清楚为什么会出现这个错误,但不幸的是我并不成功,而且对面向对象的 PHP 和 Restler 不熟悉。
请帮忙,我该如何解决这个错误。
由于 GAE 不使用“.htaccess”文件或 Apache,如何使用“mod_rewrite.php”对“Aapache mod_rewrite 功能”进行建模,请在此处查看更多详细信息:https://developers.google.com/appengine/docs /php/config/mod_rewrite
进一步:
由于应用程序的分布式特性,App Engine 不支持写入本地文件。相反,必须持久化的数据应该存储在分布式数据存储中。有关更多信息,请参阅运行时沙箱上的文档
App Engine 应用程序不能:
写入文件系统。应用程序必须使用 App Engine 数据存储来存储持久数据。允许从文件系统读取,所有随应用上传的应用文件都可用。
打开一个套接字或直接访问另一个主机。应用程序可以使用 App Engine 网址提取服务分别在端口 80 和 443 上向其他主机发出 HTTP 和 HTTPS 请求。
产生一个子进程或线程。对应用程序的 Web 请求必须在几秒钟内在单个进程中处理。需要很长时间才能响应的进程会被终止,以避免 Web 服务器过载。
进行其他类型的系统调用。
GAE 为 Google Cloud Storage 提供了一个流包装器,这使得该服务的使用变得非常简单。假设您已完成 GCS 上的先决条件文件,可以使用文档中所示的标准 PHP 文件处理函数访问。
$contents = file_get_contents($file);
var_dump($contents); // prints: hello world
?>
我认为 HumanReadableCache.php 中的代码需要更改为使用 gs://bucket/file 进行缓存实现。 (apiVersionMap AUTO GENERATED FILE)我不是一个真正的 OOP_PHP 程序员来替换/编辑 HumanReadableCache.php 中的代码,所以你能帮忙并想出 GAE 版本的 Restler 吗?非常感谢。
【问题讨论】:
标签: php google-app-engine restler