使用本地开发服务器

您可以使用本地开发服务器模拟在生产环境中运行 App Engine 应用,并使用它来访问 App Engine 捆绑服务。

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

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

准备工作

由于 Go 1.11 已达到支持终止期限,因此您无法再使用最新版本的 dev_appserver.py 在本地运行应用。如需下载 devapp_server.py 的归档版本,请按照以下步骤操作:

  1. 归档中,下载已达到支持终止期限的运行时的 dev_appserver.py 服务器所在的压缩文件夹。

  2. 将目录的内容解压缩到本地文件系统,例如解压缩到 /home 目录。您可以在 google_appengine/ 目录中找到 dev_appserver.py

设置本地开发服务器

如需运行本地开发服务器工具,您必须设置以下内容:

  1. 验证您是否安装了 2.7.12 或更高版本的 Python 2 解释器。

  2. 将 shell 中的 DEVAPPSERVER_ROOT 环境变量设置为 Python 2 解释器的路径。

运行本地开发服务器

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

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

  1. 在包含 app.yaml 配置文件的目录中,运行 dev_appserver.py 命令。

    dev_appserver.py

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

    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归档版本的文件夹的路径。

    goapp serve

    goapp serve 命令包含在原始 Go 版 App Engine SDK 中,用于封装底层 dev_appserver.py Python 工具。如需启动本地开发服务器,请运行以下命令:

      goapp serve
    

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

  2. 本地开发服务器现已运行并侦听请求。您可以通过使用网络浏览器访问 http://localhost:8080/ 来查看应用的运行情况。

    如果您使用 --port 选项指定了自定义端口,请记得在浏览器中指向该端口。

如需通过命令行停止本地服务器,请按以下组合键:

  • macOS 或 Linux:Control+C
  • Windows:Control+Break

指定应用 ID

如需在本地服务器中访问您的应用 ID(例如,用于模仿某个电子邮件地址),请使用 appengine.AppID 函数。如需获取运行中应用的主机名,请使用 appengine.DefaultVersionHostname 函数。

检测应用运行时环境

如需确定您的代码是在生产环境中运行还是在本地开发服务器中运行,您可以调用 IsDevAppServer() 方法。如果返回值为 true,则您的代码是在本地开发环境中运行;否则,是在生产环境中运行。


package devserver

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func init() {
	http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "IsDevAppServer: %v", appengine.IsDevAppServer())
}

使用本地 Datastore

本地开发服务器使用在本地服务器调用期间保持不变的本地文件来模拟 App Engine Datastore。

如需详细了解索引和 index.yaml,请参阅 Datastore 索引Datastore 索引配置页面。

浏览本地 Datastore

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

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

  1. 启动开发服务器

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

  3. 查看本地 Datastore 内容。

指定 ID 分配政策

对于生产 App Engine,您可以将数据存储区设置为自动生成实体 ID

虽然生产服务器的自动 ID 分配政策与开发服务器所用的政策完全不同,但您也可以为本地服务器设置自动 ID 分配政策。

如需指定自动 ID 分配政策,请使用 --auto_id_policy 选项:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential

您需要进行如下替换:

  • DEVAPPSERVER_ROOT 替换为您在其中解压缩 devapp_server.py归档版本的文件夹的路径。

  • --auto_id_policy 替换为以下项之一:

    • scattered:从大致均匀分布的整数的非重复序列分配(默认)ID 时。
    • sequential:从连续整数序列分配 ID 时。

清除本地 Datastore

如需清除应用的本地数据存储区,请按如下方式调用本地开发服务器:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml

DEVAPPSERVER_ROOT 替换为您在其中解压缩 devapp_server.py归档版本的文件夹的路径。

更改本地 Datastore 位置

如需更改用于数据存储区文件的位置,请使用 --datastore_path 选项:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

DEVAPPSERVER_ROOT 替换为您在其中解压缩 devapp_server.py归档版本的文件夹的路径。

使用 Users 服务

App Engine 提供 Users 服务来简化应用的身份验证和授权。本地开发服务器使用自己的账号登录和退出页面模拟 Google 账号的行为。在本地开发服务器下运行时,LoginURLLogoutURL 函数会在本地服务器上返回 /_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 请求,本地开发服务器会直接从您的计算机中发出该请求。如果您使用代理服务器访问网站,则本地服务器上的网址提取行为可能与生产 App Engine 上的行为不同。