如何从命令行访问 Google App Engine 的开发服务器数据

1 投票
1 回答
525 浏览
提问于 2025-04-17 00:13

我经常会把我的Google App Engine(GAE)生产环境的数据下载到本地(使用一个自定义脚本,基本上是调用 appcfg.py download_data),然后再上传到开发服务器,这样我的开发环境中的数据就和生产环境一致了。你可以在Launchpad上找到这些脚本:

这个启动脚本的功能是:

  • 启动开发服务器(清空数据库)
  • 把之前下载的模型加载到本地数据库中
  • 更改所有普通用户和管理员的密码,这样我们就可以用“toto”这个密码登录开发环境中的任何用户。这个操作是通过一个直接访问新加载的数据存储的脚本来完成的。

一切运行得很好,直到GAE 1.5.2版本。那时开发服务器的前缀变成了 dev~,所以我在启动开发服务器时添加了 --default_partition=''。但是现在更改密码的脚本似乎无法访问加载的数据,它总是返回0个普通用户或管理员用户。我想知道如何从命令行访问数据,而不是通过URL,以防止在生产服务器上出现这种情况。./extra中的脚本没有上传到GAE,因此无法从那里执行。

给你一个大概念(但请查看脚本以获取更多上下文),这个脚本以前的功能是(在GAE <= 1.5.1时有效):

args, option_dict = ParseArguments(['', colCasaBasePath])
config, matcher = LoadAppConfig(colCasaBasePath, {})
SetupStubs(config.application, **option_dict)

应用程序的模型可以正常访问:

from src.models import WebUser, ScyllaUser
for tipo in (WebUser, ScyllaUser):
    usuarios = tipo.all()
    # Now len(usuarios) == 0

在GAE 1.5.1之后,发生了什么变化导致我的GAE数据访问脚本失效?你会如何执行这样的工作流程?

1 个回答

0

诀窍是要在访问GAE数据的脚本中,给ParseArguments()这个函数加上--default_partition=这个参数:

args, option_dict = ParseArguments(['', colCasaBasePath, "--default_partition="])

注意,在=后面什么都没有,这就是让我困惑的地方。我最开始尝试加"--default_partition=''",但这样没有任何效果(也没有报错)。

加上这个参数后,脚本又能循环遍历开发数据存储中加载的所有用户了。你可以在Launchpad上看到我所做的更改。

撰写回答