上传和管理 Python 应用程序

来源:互联网 发布:战舰世界乌达洛伊数据 编辑:程序博客网 时间:2024/05/18 02:50

App Engine Python SDK 含有用于和 App Engine 交互的名为 appcfg.py 的命令。可使用该命令将您的应用程序的新版本代码、配置和静态文件上传到 App Engine。还可使用该命令来管理数据存储区索引以及下载日志数据。

•上传应用程序
•更新索引
•删除不使用的索引
•管理计划任务
•下载日志
•上传数据
•使用 HTTP 代理
•命令行参数
上传应用程序
要上传应用程序文件,请使用 update 操作并输入应用程序根目录的名称来运行 appcfg.py 命令。根目录应包含应用程序的 app.yaml 文件。

appcfg.py update myapp/
appcfg.py 将从 app.yaml 文件获得应用程序 ID,并提示您输入 Google 帐户的电子邮件地址和密码。使用您的帐户成功登录后,appcfg.py 会存储一个“cookie”,这样以后登录时就无需再提示输入密码。

您可以使用 --email 选项在命令行指定电子邮件地址。您不能将密码指定为命令行选项。

appcfg.py --email=Albert.Johnson@example.com update myapp/
更新索引
当您使用 appcfg.py update 上传应用程序时,更新将包括应用程序的 index.yaml 文件。如果 index.yaml 文件定义了 App Engine 上还不存在的索引,则 App Engine 将创建此新索引。创建索引可能需要一些时间,时间长短取决于数据存储区中已存在的需要编入新索引的数据量。如果应用程序执行需要索引的查询但该索引还未构建完成,则该查询将引发异常。

要防止出现该问题,您必须确保在索引构建完成之前,要求新索引的应用程序的新版本不是应用程序的活动版本。其中一种做法是,每当您在 index.yaml 中添加或更改索引时,即在 app.yaml 中为应用程序指定一个新版本号。应用程序将以新版本上传,不会自动变成默认的版本。当您的索引已完成构建时,可使用管理控制台的“版本”部分将默认版本更改为新版本。

确保新索引在新的应用程序启用之前已构建的另一种方法是,在上传应用程序之前单独上传 index.yaml 配置。要仅上传应用程序的索引配置,请使用以下命令:

appcfg.py update_indexes myapp/
可从管理控制台的“索引”部分检查应用程序索引的状态。

删除不使用的索引
当您从 index.yaml 更改或删除索引时,不会自动从 App Engine 删除原索引。这使您可以在构建新索引时使较旧版本的应用程序保持运行,或当新版本发现问题时立即还原到较旧版本。

如果您确定旧索引不再需要,则可使用以下命令将其从 App Engine 删除:

appcfg.py vacuum_indexes myapp/
该命令将删除 index.yaml 的最近上传的版本中未提及的应用程序的所有索引。

管理计划任务
App Engine 支持计划任务(又称 cron job)。可在名为 cron.yaml 的文件中指定这些任务,然后使用 appcfg.py update_cron 命令将其上传:

appcfg.py update_cron myapp/
在文件存在的情况下,appcfg update 也将上传 cron job 说明。有关 cron job 的详细信息,请参阅 Cron Job 文档。

下载日志
App Engine 使用 Python 标准库中的 logging 模块维护您的应用程序发出的消息以及其他打印到标准错误流中的消息的日志。App Engine 还将在日志中记录每个请求。您可从管理控制台的“日志”部分浏览应用程序的日志。

如果您希望对应用程序的日志执行详细分析,可将日志数据下载到您的计算机上的文件中。要将日志下载到名为 mylogs.txt 的文件,请使用以下命令:

appcfg.py request_logs myapp/ mylogs.txt
默认情况下,该命令将下载从当前日历日(自太平洋时间午夜零点起)开始的 INFO 或更高日志级别(省略 DEBUG 级别的消息)的日志消息。该命令还将覆盖本地的日志文件。可使用命令行选项调整天数、最小日志级别以及是覆盖本地日志文件还是附加到本地日志文件。有关这些选项的详细信息,请参见下文。

上传数据
可使用 appcfg.py 通过 upload_data 操作将大量数据上传到您的应用程序的数据存储区。该操作需要在您的 Python 应用程序中设置特定的请求处理程序。有关如何使用该功能的完整操作说明,请参阅上传数据。

使用 HTTP 代理
如果您在 HTTP 代理下运行 appcfg.py,则必须告知 appcfg.py 该代理的名称。要为 appcfg.py 设置 HTTP 代理,请设置 http_proxy 环境变量。

使用 Windows(在命令提示符中):

set HTTP_PROXY=http://cache.mycompany.com:3128
appcfg.py update myapp
使用 Mac OS X(在终端中)或 Linux 中的命令行:

export http_proxy="http://cache.mycompany.com:3128"
appcfg.py update myapp
命令行参数
appcfg.py 命令包含一组选项、一个操作和该操作的参数。

有以下操作可选:

appcfg.py [options] update <app-directory>
为指定了应用程序根目录的应用程序上传文件。应用程序 ID 和版本是从应用程序目录中的 app.yaml 文件获取的。

appcfg.py [options] rollback <app-directory>
撤消指定应用程序完成的部分更新。如果更新中断并且命令报告由于锁定而无法更新应用程序,则可以使用此操作。

appcfg.py [options] update_indexes <app-directory>
更新 App Engine 中的数据存储区索引以包括新添加的索引。如果新版本的应用程序需要添加到 index.yaml 的额外索引定义,您可在上传新版本的应用程序之前在 App Engine 中更新索引配置。在上传新版本的应用程序之前几个小时运行该操作,可给予索引进行构建的时间并在部署应用程序时提供服务。

appcfg.py [options] vacuum_indexes <app-directory>
删除 App Engine 中不使用的数据存储区索引。如果从 index.yaml 中删除索引定义,则当上传应用程序时,该索引不会自动删除,因为它可能正被该应用程序的其他版本使用。当不再需要所有旧索引时执行此操作。

appcfg.py [options] request_logs <app-directory> <output-file>
检索 App Engine 上运行的应用程序的日志数据。output-file 是要创建、替换或附加(如果设置了 --append 标记)的文件的名称。如果 output-file 为连字符 (-),则日志数据将打印到控制台。以下选项适用于 request_logs:

--num_days=...
要检索的日志数据的天数(结束时间为国际协调时间当前日期的午夜)。0 值会检索所有可用日志。如果 --append 已指定,则默认为 0,否则默认为 1。

--severity=...
要检索的日志消息的最低日志级别。该值是一个与日志级别相对应的数字:4 表示“严重”,3 表示“错误”,2 表示“警告”,1 表示“信息”,0 表示“调试”。指定日志级别及更高级别的所有消息都会被检索。默认为 1(信息)。

--append
将抓取的数据附加到输出文件,开头为文件中尚未出现的第一个日志行。每天运行一次该命令,使文件中的 --append 结果包含所有日志数据。

默认为覆盖输出文件。如果 output-file 为 -(打印到控制台),则不适用。

appcfg.py [options] upload_data <app-directory>
从 CSV 文件将数据上传至数据存储区。有关使用该功能的完整信息,请参阅上传数据。

appcfg.py help <action>
打印有关指定操作的帮助消息,然后退出。

appcfg.py 命令接受以下适用于所有操作的选项:

--quiet
成功时不打印消息。

--verbose
打印有关命令正在执行的操作的消息。

--noisy
打印有关命令正在执行的操作的多个消息。在与 App Engine 团队协作解决上传问题时,此选项最为有用。

--email=...
应用程序管理员的 Google 帐户的电子邮件地址,适用于需要登录的操作。如果忽略了该值且以前使用该命令时未存储 cookie,则该命令会提示输入。

--passin
如果给定了该值,则该工具将接受 stdin 中的 Google 帐户密码而不是交互地提示输入密码。这使您无需在命令行中输入密码即可从脚本调用该工具。

--server=...
App Engine 服务器主机名。默认为 appengine.google.com。

--host=...
用于与远程过程调用配合使用的本地计算机的主机名。

--no_cookies
请勿将管理员登录凭证存储为 cookie;每次登录时都提示输入密码。

--force
强制删除不使用的索引。默认情况下,上传应用程序不会从服务器中删除不使用的索引,即使这些索引未显示在 index.yaml 文件中。

--max_size=...
要上传的文件的大小上限,以字节数表示。大于该大小的文件不会上传。默认为 1048576。服务器当前将最大文件大小强制为 1048576 字节,因此增加该值无任何效果。

原创粉丝点击