使用本地开发服务器

本地开发服务器模拟 App Engine 的 Java 运行时环境及其所有服务,包括 Datastore。

准备工作

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

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

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

运行开发网络服务器

有关为应用设置系统属性和环境变量的信息,请参阅请求的处理方式

您还可以通过命令提示符运行开发 Web 服务器。要运行的命令位于 SDK 的目录中,其相对路径为 google_appengine/google/appengine/tools/java/bin

Windows 命令语法:

google_appengine\google\appengine\tools\java\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Linux 或 macOS 命令语法:

google_appengine/google/appengine/tools/java/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

该命令接受应用的 WAR 目录位置当作参数。

停止开发服务器

要停止 Web 服务器,请按 Ctrl-C

检测应用运行时环境

如需确定您的代码是在生产环境中运行还是在本地开发服务器中运行,您可以检查 SystemProperty.environment.value() 方法的值。例如:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

使用本地 Datastore 模拟器

开发 Web 服务器使用您计算机上本地基于文件的 Datastore 来模拟 Datastore。 Datastore 名为 local_db.bin,它是在您应用的 WAR 目录(WEB-INF /appengine-generated/ 目录)中创建的。该 Datastore 不随应用一起上传。

此 Datastore 在前后两次调用网络服务器之间保持不变,因此在您下次运行网络服务器时,您存储的数据仍可用。要清除 Datastore 的内容,请关闭服务器,然后删除该文件。

Datastore 索引配置中所述,开发服务器可以为您的应用所需的 Datastore 索引生成配置(根据应用在测试期间执行的查询确定)。这将会在 WAR 的 WEB-INF/appengine-generated/ 目录中生成一个名为 datastore-indexes-auto.xml 的文件。如需停用自动索引配置,请使用 <datastore-indexes> 元素的 autoGenerate="false" 特性在 WEB-INF/ 目录中创建或修改 datastore-indexes.xml 文件。

在开发服务器中浏览 Datastore

如需使用开发 Web 服务器浏览本地 Datastore,请执行以下操作:

  1. 根据上文所述启动开发服务器。
  2. 转到开发控制台
  3. 点击左侧导航窗格中的 Datastore 查看器以查看本地 Datastore 内容。

Datastore 一致性模型

默认情况下,本地 Datastore 已配置,因此那些不会立即显示在全局查询中的 Datastore 写入所占百分比设置为 10%。

如需调整此一致性级别,请设置 datastore.default_high_rep_job_policy_unapplied_job_pct 系统属性,使其值对应于应用所需的最终一致性数量。

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

如果您使用命令提示符 java_dev_appserver.sh 设置此属性,则需要使用 --jvm_flag=... 进行设置:

google_appengine/google/appengine/tools/java/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

datastore.default_high_rep_job_policy_unapplied_job_pct 的有效范围介于 0 到 100 之间。如果您使用此范围之外的数字,则会收到错误消息。

指定自动 ID 分配政策

您可以配置本地 Datastore 分配自动实体 ID 的方式。

开发服务器支持以下自动 ID 分配政策:

sequential
ID 从连续整数序列分配。
scattered
ID 从大致均匀分布的整数的非重复序列分配。

本地 Datastore 中的默认政策是 scattered

如需指定自动 ID 政策,请将 datastore.auto_id_allocation_policy 系统属性设置为 sequentialscattered

-Ddatastore.auto_id_allocation_policy=scattered

如需通过传递给 dev_appserver 宏的标志来设置此系统属性,请使用以下命令:

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

模拟用户账号

开发 Web 服务器使用自己的登录和退出登录页面模拟 Google 账号。在开发 Web 服务器中运行时,生成登录和退出登录网址的方法会在本地服务器上返回 /_ah/login/_ah/logout 的网址。

开发登录页面包含一个表单,您可以在其中输入电子邮件地址。会话将使用您输入的电子邮件地址作为活跃用户。

要让应用认为登录用户是管理员,请选中表单上的“以管理员身份登录”(Sign in as Administrator) 复选框。

使用网址提取

当应用使用 URL Fetch API 发出 HTTP 请求时,开发 Web 服务器会直接从您的计算机中发出该请求。如果您使用代理服务器访问网站,该行为可能与在 App Engine 上运行应用时不同。

开发控制台

开发 Web 服务器包含一个控制台 Web 应用。借助该控制台,您可以浏览本地 Datastore。

如要访问该控制台,请在您的服务器上访问 /_ah/admin 网址:http://localhost:8080/_ah/admin

命令行参数

开发服务器命令支持以下命令行参数:

--address=...

用于服务器的主机地址。您可能需要设置该参数,才能够从网络上的其他计算机访问开发服务器。地址为 0.0.0.0 时,既可使用 localhost 访问,也可使用主机名访问。默认值:localhost

--default_gcs_bucket=...

设置默认的 Google Cloud Storage 存储桶名称。

--disable_update_check

如果您指定此参数,开发服务器将不会联系 App Engine 来检查是否有新的 SDK 版本可用。默认情况下,服务器会在启动时检查新版本,并在新版本可用时输出一条消息。

--generated_dir=...

设置将在其中创建生成文件的目录。

--help

输出一条帮助消息,然后退出。

--jvm_flag=...

以 JVM 参数的形式传递指定标志。可以重复以提供多个标志。

--port=...

用于服务器的端口号。默认值为 8080

--sdk_root=...

gcloud CLI 的路径(如果与工具的位置不同)。

--server=...

用于确定最新 SDK 版本的服务器。