本地开发服务器 (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.org或example.org。以**.开头的主机允许任何深度的子网域。例如,**.example.com允许host.example.com和sub.host.example.com,但不允许example.com。(默认值:[]) --allow_skipped_files=...- 使
app.yamlskip_files或static句柄中指定的文件可供应用读取(默认值: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。选项为
sequential或scattered(默认值: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...gRPCAPI 服务器监听的端口(默认值:0)。--help输出一条帮助消息,然后退出。
--host=...用于服务器的主机地址。您可能需要设置该参数,才能够从网络上的其他计算机访问开发服务器。如果地址为
0.0.0.0,则同时允许 localhost 访问和 IP 或主机名访问(默认值:localhost)。--log_level=...将日志消息写入控制台时的最低日志记录级别;系统将输出指定日志记录级别或更高级别的消息。 可能的值包括
debug、info、warning、error和critical。--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。如果出于服务等目的而启动了多个服务器,则系统会为它们分配后续端口,例如8081、8082。--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 应用,请指定此标志。