本地开发服务器选项

本地开发服务器 (dev_appserver.py) 属于 gcloud CLI 的 App Engine 组件。本主题提供了有关 dev_appserver.py 用法的高级信息。

我们建议您使用标准 Python 工具,例如,使用 virtualenv 创建隔离环境,使用 pytest 运行单元测试和集成测试,而不要依赖随 Google Cloud SDK 一起提供的本地开发服务器 dev_appserver

如需详细了解本地测试,请参阅使用本地开发服务器

设置本地开发服务器工具

示例 dev_appserver.py 命令可能如下所示:

python3 CLOUD_SDK_ROOT/bin/dev_appserver.py OPTION yaml_path FILES

请替换以下内容:

  • CLOUD_SDK_ROOT 替换为您在其中安装了 Google Cloud CLI 的根目录的路径。默认目录是 ./google-cloud-sdk/
  • OPTION 替换为本地开发服务器支持的标志。
  • FILES 为位置参数 yaml_path 指定一个或多个 app.yaml 文件,每个服务对应一个文件。

如需查看完整的选项列表,请运行以下命令:

python3 CLOUD_SDK_ROOT/bin/dev_appserver.py -h

常用选项

最常用的选项如下所示:

--admin_host=ADMIN_HOST
本地开发服务器的管理控制台应绑定的主机名(默认值:localhost)。
--admin_port=ADMIN_PORT
本地开发服务器的管理控制台应绑定到的端口(默认值:8,000)。
--addn_host=ADDN_HOST
借助此参数,您可以将其他 HTTP 主机标头值列入许可名单,以便可以使用代理访问服务器,而无需停用主机检查(请参阅 --enable_host_checking)。以 *. 开头的其他主机允许所有子网域。例如,*.example.org 允许 host.example.org,但不允许 sub.host.example.orgexample.org。以 **. 开头的主机允许任何深度的子网域。例如,**.example.com 允许 host.example.comsub.host.example.com,但不允许 example.com。(默认值:[])
--allow_skipped_files=...
使 app.yaml skip_filesstatic 句柄中指定的文件可供应用读取(默认值:False)。
-A APP_ID, --application=...
设置应用,并替换 app.yaml 文件中的应用值(默认值:None)。
--appidentity_email_address=...
与具有可下载密钥的服务账号关联的电子邮件地址。可以为 None,表示没有本地应用身份(默认值:None)。
--appidentity_private_key_path=...
与服务账号关联的私钥文件的路径(.pem 格式)。如果设置了 appidentity_email_address,则必须设置此参数(默认值:None)。
--api_host=API_HOST
API 服务器应绑定到的主机名(默认值:localhost)。
--api_port=API_PORT
API 调用的服务器应绑定到的端口(默认值:0)。
--auth_domain=...
要使用的授权网域的名称(默认值:gmail.com)。
--auto_id_policy=...
已弃用。本地数据存储区如何分配自动 ID。选项为 sequentialscattered(默认值:scattered)。
--automatic_restart=...
当与模块相关的文件发生更改时,系统会自动重启实例(默认值:True)。
--blobstore_path=...
用于存储 blob 内容的目录的路径(如果未设置,则默认为 --storage_path 的子目录;默认值:None)。
--clear_datastore=yes|no
在启动 Web 服务器之前,先清除数据存储区数据和历史记录文件。(默认值:no)。
--clear_search_indexes...
清除搜索索引(默认值:False)。
--custom_entrypoint=...

为自定义运行时模块指定入口点。如果存在此类模块,则此参数是必需的。在字符串中添加 {port}(不含英文引号),以将端口号作为参数传入(默认值: )。例如:

--custom_entrypoint="gunicorn -b localhost:{port}
  mymodule:application"
--datastore_consistency_policy {consistent,random,time}

决定数据存储区写入内容是否应显示在全局查询中时应用的政策(默认值:time)。

--datastore_emulator_cmd=...

调用 Cloud Datastore 模拟器的脚本的路径。如果留空,则 dev_appserver 将尝试在 Google Cloud SDK 中查找数据存储区模拟器(默认值:None)。

--datastore_emulator_port=...

dev_appserver 应在其中启动 Cloud Datastore 模拟器的端口号(默认值:0)。

--datastore_path=...

用于本地数据存储区数据文件的路径。如果文件不存在,服务器将创建该文件。

--default_gcs_bucket_name=...

默认 Cloud Storage 存储桶名称(默认值:None)。

--dev_appserver_log_level {debug,info,warning,critical,error}

一个日志级别,如果低于该级别,则开发服务器生成的日志记录消息不会显示在控制台上(此标志更适合诊断 dev_appserver.py 中的问题,而不是应用代码中的问题,默认值:info)。

--enable_host_checking=yes|no

确定是否对应用模块、API 服务器和管理服务器强制执行 HTTP 主机检查。主机检查可防止 DNS 重新绑定攻击,只有在了解安全隐患后才停用(默认值:True)。

--enable_console=yes|no

在管理视图中启用交互式控制台(默认值:False)。

--enable_sendmail=yes|no

使用本地计算机上安装的 Sendmail 发送电子邮件。

--enable_task_running=yes|no

可让开发服务器运行推送任务(默认值:yes)。如果您指定 no,则该服务器不会运行推送任务。

--env_var=...

用户为本地运行时进程定义的环境变量。每个 env_var 都采用 key=value 格式,并且您可以定义多个环境变量。除了 app.yaml 中的 env_variables 之外,此标志还可以为本地进程设置额外的环境变量。

例如:--env_var KEY_1=val1 --env_var KEY_2=val2

--grpc_api_port...

gRPC API 服务器监听的端口(默认值:0)。

--help

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

--host=...

用于服务器的主机地址。您可能需要设置该参数,才能够从网络上的其他计算机访问开发服务器。如果地址为 0.0.0.0,则同时允许 localhost 访问和 IP 或主机名访问(默认值:localhost)。

--log_level=...

将日志消息写入控制台时的最低日志记录级别;系统将输出指定日志记录级别或更高级别的消息。 可能的值包括 debuginfowarningerrorcritical

--logs_path=...

默认情况下,本地开发服务器的日志仅存储在内存中。在运行本地开发服务器时指定此选项可将日志存储到文件中,从而确保日志不会在服务器重启过程中丢失。 您必须指定 SQLite 数据库文件的目录路径和名称。如果 SQLite 数据库文件尚不存在,则系统会使用指定的名称创建该文件。

例如:--logs_path=/home/logs/boglogs.db

--max_module_instances=...

可以为特定模块启动的运行时实例数上限。该值可以是整数(在这种情况下,所有模块都受限于实例数),也可以是以英文逗号分隔的 module:max_instances 列表(默认值:None)。例如:default:5,backend:3

--mysql_host=MYSQL_HOST

用于模拟 Cloud SQL 存储的运行中 MySQL 服务器的主机名(默认值:localhost)。

--mysql_port=MYSQL_PORT

用于模拟 Cloud SQL 存储的运行中 MySQL 服务器的端口号(默认值:3306)。

--mysql_user=MYSQL_USER

连接到 --mysql_host--mysql_port--mysql_socket 中指定的 MySQL 服务器时使用的用户名(默认值: )。

--mysql_password=MYSQL_PASSWORD

连接到 --mysql_host--mysql_port--mysql_socket 中指定的 MySQL 服务器时使用的密码(默认值: )。

--mysql_socket=MYSQL_SOCKET

连接到用于模拟 Cloud SQL 存储的运行中 MySQL 服务器时使用的 Unix 套接字文件的路径(默认值:None)。

--port=...

用于服务器的端口号。默认为 8080。如果出于服务等目的而启动了多个服务器,则系统会为它们分配后续端口,例如 80818082

--require_indexes=yes|no

停用在 index.yaml 文件中自动生成条目的功能。当应用发出的查询要求在该文件中定义其索引,并且未找到索引定义时,系统会引发异常,这与在 App Engine 上运行时发生的情况类似(默认值:no)。

--runtime=...

指定要使用的默认运行时。 如需查看受支持的运行时的列表,请参阅运行时支持时间表

--running_datastore_emulator_host=...

替换环境变量 DATASTORE_EMULATOR_HOST,即 dev_appserver 可以连接到的运行中 Cloud Datastore 模拟器的 hostname:port(默认值:None)。

--search_indexes_path=...

用于存储搜索索引的文件的路径(如果未设置,则默认为 --storage_path 中的文件;默认值:None)。

--skip_sdk_update_check=...

跳过对 SDK 更新的检查(如果为 false,则使用 .appcfg_nag 来决定;默认值:False)。

--show_mail_body=...

记录使用 Mail API 发送的电子邮件的内容(默认值:False)。

--smtp_allow_tls...

在 SMTP 服务器公布 TLS 支持时允许使用 TLS(如果未设置 --smtp_host,则忽略;默认值:True)。

--smtp_host=...

用于发送电子邮件的 SMTP 服务器的主机名。

--smtp_port=...

用于发送电子邮件的 SMTP 服务器的端口号。

--smtp_user=...

SMTP 服务器上用于发送电子邮件的用户名。

--smtp_password=...

SMTP 服务器上用于发送电子邮件的密码。

--storage_path=...

将存储所有本地文件(例如 Datastore、Blobstore、Cloud Storage 文件和日志)的路径,除非被 --datastore_path--blobstore_path--logs_path 替换。

--support_datastore_emulator=yes|no

使用 Cloud Datastore 模拟器(测试版)执行本地数据存储区模拟。

--ssl_certificate_path=...

SSL 证书的路径。如果使用此选项,则还必须提供 --ssl_certificate_key_path(默认值:None)。

--ssl_certificate_key_path=...

相应 SSL 私钥的路径。如果使用此选项,则还必须提供 --ssl_certificate_path(默认值:None)。

--threadsafe_override=...

替换应用的线程安全配置。 该值可以是布尔值(在这种情况下,所有模块的线程安全设置会被替换),也可以是以英文逗号分隔的 module:threadsafe_override 列表(默认值:None)。

例如:default:False,backend:True

--use_mtime_file_watcher=...

使用 mtime 轮询检测源代码更改 - 如果要使用分布式文件系统从远程机器修改代码,则这种做法非常有用(默认值:False)。

--watcher_ignore_re=...

用于指定 filewatcher 要忽略的文件的正则表达式字符串。(默认值:None)

Python 运行时专用命令选项:

--python_startup_script
在新的 Python 运行时实例启动时运行的脚本(对于调试程序等工具非常有用;默认值:None)。
--python_startup_args
可用于 python_startup_script 中指定的脚本的参数(默认值:None)。
--python27_executable_path=...
python27 运行时实例的 python27 可执行文件的路径(默认值:None)。
--python_virtualenv_path
用于为 Python 3 应用的本地 devappserver 执行环境设置 Python 3 虚拟环境的目录的路径。如果路径不存在,系统会创建目录,但不会在 devappserver 执行结束时清理该目录,以便在调用之间可用于进行缓存。如果您尚未定义目录,系统将使用临时目录,并在执行结束时清理该目录。
--runtime_python_path=...
Python 二进制文件的路径。如需在 dev_appserver 上运行 Python 应用,请指定此标志。