您可以使用本地开发服务器模拟在生产环境中运行 App Engine 应用,并使用它来访问 App Engine 捆绑服务。
该模拟环境会强制实施一些沙盒限制,例如受限制的系统功能和 PHP 5 模块导入,但不包括请求超时或配额等其他限制。
本地开发服务器还会模拟由 App Engine SDK 库提供的服务(包括 Datastore、Memcache 和任务队列),在本地执行其任务。当您的应用在开发服务器中运行时,您仍然可以使用 Google API HTTP 端点对生产基础架构进行远程 API 调用。
准备工作
由于 PHP 5 已达到支持终止期限,因此您无法再使用最新版本的 dev_appserver.py
在本地运行应用。如需下载 devapp_server.py
的归档版本,请按照以下步骤操作:
从归档中,下载已达到支持终止期限的运行时的
dev_appserver.py
服务器所在的压缩文件夹。将目录的内容解压缩到本地文件系统,例如解压缩到
/home
目录。您可以在google_appengine/
目录中找到dev_appserver.py
。
设置本地开发服务器
如需运行本地开发服务器工具,您必须设置以下内容:
验证您是否安装了 2.7.12 或更高版本的 Python 2 解释器。
将 shell 中的
DEVAPPSERVER_ROOT
环境变量设置为 Python 2 解释器的路径。
运行本地开发服务器
设置本地开发服务器并为应用创建 app.yaml
配置文件后,您可以使用 dev_appserver.py
命令在本地运行应用。
如需启动本地开发服务器,请执行以下操作:
在包含
app.yaml
配置文件的目录中,运行dev_appserver.py
命令。Windows / macOS
指定应用的目录路径,例如:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
或者,您可以指定特定服务的配置文件,例如:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
如需更改端口,请添加
--port
选项:python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
将
[DEVAPPSERVER_ROOT]
替换为您在其中解压缩devapp_server.py
的归档版本的文件夹的路径。Linux/cust. php-cgi
如果您使用的是 Linux,或者想要使用自定义版本的
php-cgi
,则需要指定php-cgi
的目录路径:在本地机器上构建自己的 App Engine PHP 扩展程序版本。
使用
--php_executable_path
和--php_gae_extension_path
选项启动本地开发服务器:python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --php_executable_path=[PATH_TO_PHP_CGI] --php_gae_extension_path=[PATH_TO_APPENGINE_EXTENSION] app.yaml
您需要进行如下替换:
- 将 DEVAPPSERVER_ROOT 替换为您在其中解压缩
devapp_server.py
的归档版本的文件夹的路径。 - 将
--php_executable_path
替换为 PHP 解释器的位置。 - 将
--php_gae_extension_path
替换为您在上一步构建的gae_runtime_module.so
文件的位置。
- 将 DEVAPPSERVER_ROOT 替换为您在其中解压缩
如需详细了解
dev_appserver.py
命令选项,请参阅本地开发服务器选项。本地开发服务器现已运行并侦听请求。您可以通过使用网络浏览器访问 http://localhost:8080/ 来查看应用的运行情况。
如果您使用
--port
选项指定了自定义端口,请记得在浏览器中指向该端口。
如需通过命令行停止本地服务器,请按以下组合键:
- macOS 或 Linux:Control+C
- Windows:Control+Break
指定应用 ID
如需在本地服务器中获取您的应用 ID(例如,用于仿冒某个电子邮件地址),请使用 AppIdentityService::getApplicationId
函数。如需获取运行中应用的主机名,请使用 AppIdentityService::getDefaultVersionHostname
函数。
检测应用运行时环境
如需确定您的代码是在生产环境中运行还是在本地开发服务器中运行,您可以检查 SERVER_SOFTWARE
方法的值。
if (strpos(getenv('SERVER_SOFTWARE'), 'Development') === 0){
echo 'Local development server';
} else {
echo 'Production';
}
存储数据
PHP App Engine 支持通过 PHP 的 Stream API 对 Cloud Storage 执行读写操作。如需对 Cloud Storage 执行读写操作,您可以在使用支持 fopen、fwrite 或 file_get_contents 等 PHP Streams 实现的任何 PHP 函数时指定 Cloud Storage URI (gs://
)。
本地开发服务器会通过对临时本地文件(其内容会在各次请求之间保留)执行读写操作来模拟此功能。
浏览本地 Datastore
如果您的应用已使用本地开发服务器将数据写入本地数据存储区,您可以在本地开发控制台中浏览该数据。
如需浏览本地数据存储区,请执行以下操作:
在本地开发控制台中访问 Datastore 查看器。(网址为
http://localhost:8000/datastore
。)查看本地 Datastore 内容。
使用 Users 服务
App Engine 提供 Users 服务来简化应用的身份验证和授权。本地开发服务器使用自己的账号登录和退出页面模拟 Google 账号的行为。在本地开发服务器上运行时,createLoginURL
和 createLogoutURL
函数会返回本地服务器上 /_ah/login
和 /_ah/logout
的网址。
使用邮件
借助 SMTP 服务器或本地安装的 Sendmail,本地开发服务器可以在收到 App Engine Mail 服务调用时发送电子邮件。
使用 SMTP
要使用 SMTP 服务器实现邮件支持,请按如下方式调用 dev_appserver.py
:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
您需要进行如下替换:
- 将
[DEVAPPSERVER_ROOT]
替换为您在其中解压缩devapp_server.py
的归档版本的文件夹的路径。 - 将
--smtp_host
、--smtp_port
、--smtp_user
和--smtp_password
选项替换为您自己的配置值。
使用 Sendmail
要使用 Sendmail 实现邮件支持,请按如下方式调用 dev_appserver.py
:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
将 [DEVAPPSERVER_ROOT]
替换为您在其中解压缩 devapp_server.py
的归档版本的文件夹的路径。
本地服务器将使用 sendmail
命令(采用您的默认安装配置)发送电子邮件。
使用 URL Fetch
如果您的应用使用 URL Fetch API 发出 HTTP 请求,本地开发服务器会直接从您的计算机中发出该请求。如果您使用代理服务器访问网站,则本地服务器上的 URL Fetch 行为可能与 App Engine 生产环境中的行为不同。
使用 XDebug 在本地进行调试
如果您的调试程序与 XDebug 调试程序兼容,并且您安装了 xdebug
模块,则可以将 XDebug 与本地开发服务器搭配使用。
对于 Linux 或 macOS,要在开发服务器中启用 XDebug,请执行以下操作:
使用 idekey 导出
XDEBUG_CONFIG
环境变量以供 IDE 进行连接export XDEBUG_CONFIG="idekey=netbeans-xdebug remote_host=localhost"
使用
--php_remote_debugging=yes
调用开发服务器