使用本地开发服务器

Google Cloud CLI 包含一个本地开发服务器 (dev_appserver.py)。您可以使用本地开发服务器模拟在 App Engine 生产环境中运行应用,并使用它来访问 App Engine 捆绑服务。

该模拟环境会强制实施一些沙盒限制,例如受限制的系统功能和 PHP 5 模块导入,但不包括请求超时或配额等其他限制。

本地开发服务器还会模拟由 App Engine SDK 库提供的服务(包括 Datastore、Memcache 和任务队列),在本地执行其任务。当您的应用在开发服务器中运行时,您仍然可以使用 Google API HTTP 端点对生产基础架构进行远程 API 调用。

运行本地开发服务器

为应用创建 app.yaml 配置文件后,您可使用 dev_appserver.py 命令启动本地开发服务器以在本地运行您的应用。

如需启动本地开发服务器,请执行以下操作:

  1. 在包含 app.yaml 配置文件的目录中,运行 dev_appserver.py 命令。如果 Python 2 不是您系统上的默认解释器,则您需要运行 python2 dev_appserver.py 以确保使用 Python 2 解释器。

    Windows / macOS

    指定应用的目录路径,例如:

      dev_appserver.py [PATH_TO_YOUR_APP]
    

    或者,您可以指定特定服务的配置文件,例如:

      dev_appserver.py app.yaml
    

    如需更改端口,请添加 --port 选项:

      dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
    

    Linux/cust. php-cgi

    如果您使用的是 Linux,或者想要使用自定义版本的 php-cgi,则需要指定 php-cgi 的目录路径:

    1. 在本地机器上构建自己的 App Engine PHP 扩展程序版本。

    2. 使用 --php_executable_path--php_gae_extension_path 选项启动本地开发服务器:

       dev_appserver.py --php_executable_path=[PATH_TO_PHP_CGI] --php_gae_extension_path=[PATH_TO_APPENGINE_EXTENSION] app.yaml
      

      其中 --php_executable_path 是您正在使用的 PHP 解释器的位置,--php_gae_extension_path 是您在上一步中构建的 gae_runtime_module.so 文件的位置。

    dev_appserver.py 是否无法正常运行?

    如需详细了解 dev_appserver.py 命令选项,请参阅本地开发服务器选项

  2. 本地开发服务器现已运行并侦听请求。您可以通过使用网络浏览器访问 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 执行读写操作,您可以在使用支持 fopenfwritefile_get_contents 等 PHP Streams 实现的任何 PHP 函数时指定 Cloud Storage URI (gs://)。

本地开发服务器会通过对临时本地文件(其内容会在各次请求之间保留)执行读写操作来模拟此功能。

浏览本地数据存储区

如果您的应用已使用本地开发服务器将数据写入本地数据存储区,您可以在本地开发控制台中浏览该数据。

如需浏览本地数据存储区,请执行以下操作:

  1. 启动开发服务器

  2. 在本地开发控制台中访问 Datastore 查看器。(网址为 http://localhost:8000/datastore。)

  3. 查看本地 Datastore 内容。

使用 Users 服务

App Engine 提供 Users 服务来简化应用的身份验证和授权。本地开发服务器使用自己的帐号登录和退出页面模拟 Google 帐号的行为。在本地开发服务器上运行时,createLoginURLcreateLogoutURL 函数会返回本地服务器上 /_ah/login/_ah/logout 的网址。

使用 Mail

借助 SMTP 服务器或本地安装的 Sendmail,本地开发服务器可以在收到 App Engine Mail 服务调用时发送电子邮件。

使用 SMTP

要使用 SMTP 服务器实现邮件支持,请按如下方式调用 dev_appserver.py

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

其中,您可以将 --smtp_host--smtp_port--smtp_user--smtp_password 选项设置为您自己的值。

使用 Sendmail

要使用 Sendmail 实现邮件支持,请按如下方式调用 dev_appserver.py

dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

本地服务器将使用 sendmail 命令(采用您的默认安装配置)发送电子邮件。

使用 URL Fetch

如果您的应用使用 URL Fetch API 发出 HTTP 请求,本地开发服务器会直接从您的计算机中发出该请求。如果您使用代理服务器访问网站,则本地服务器上的 URL Fetch 行为可能与 App Engine 生产环境中的行为不同。

使用 XDebug 在本地进行调试

如果您的调试程序与 XDebug 调试程序兼容,并且您安装了 xdebug 模块,则可以将 XDebug 与本地开发服务器搭配使用。

对于 Linux 或 macOS,要在开发服务器中启用 XDebug,请执行以下操作:

  1. 使用 idekey 导出 XDEBUG_CONFIG 环境变量以供 IDE 进行连接

    export XDEBUG_CONFIG="idekey=netbeans-xdebug remote_host=localhost"
    
  2. 使用 --php_remote_debugging=yes 调用开发服务器