本地开发服务器 (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.yaml
skip_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...
gRPC
API 服务器监听的端口(默认值: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 应用,请指定此标志。