将 App Engine 项目迁移到 Cloud NDB:本地 dev_appserver 访问生产云而不是本地数据存储

问题描述 投票:0回答:2

我正在尝试将 Python 2.7 App Engine 项目从 NDB 迁移到 Cloud NDB,作为迁移到 Python 3 过程的一部分。

按照Cloud NDB 迁移说明后,只需像以前一样运行 dev_appserver 现在就会访问云而不是本地数据存储。我看到 Google 的确保访问本地数据的说明,但我想我不明白如何在实践中使用它。

假设我必须使用数据存储模拟器来防止这种情况,我使用标志

--support_datastore_emulator true
运行 dev_appserver。这导致我的本地数据存储数据成功转换为 sqllite 格式,但仍然查询云。

然后,我在 app.yaml 中设置所需的环境变量:DATASTORE_DATASET、DATASTORE_PROJECT_ID、DATASTORE_EMULATOR_HOST、DATASTORE_EMULATOR_HOST_PATH、DATASTORE_HOST(这些值与

gcloud beta emulators datastore env-init
的输出匹配)。运行它会抱怨 DATASTORE_APP_ID 未设置,所以我也设置了它。

现在,一切都会启动,并显示一条确认消息,表明正在使用模拟器,但尝试访问数据存储会导致“BadArgumentError:无法导入 googledatastore。此库必须安装版本 >= 6.0.0 才能使用 Cloud Datastore API。 ”安装后,我得到了一系列永无止境的额外安装要求和模块冲突......这是一团糟,而且无论如何,这都没有在文档中列出。

如何让 dev_appserver(带或不带数据存储模拟器)访问本地数据而不是云?可悲的是,我现在花了几天时间试图让这项工作成功。

python google-app-engine pycharm dev-appserver
2个回答
0
投票

尝试一下(通过终端执行此操作,而不是在 app.yaml 中指定环境变量)。

  1. 打开终端并按照说明启动数据存储模拟器

  2. 模拟器启动并运行后,在单独的终端中,运行

    dev_appserver.py
    命令

如果上述方法不起作用,则有 2 个解决方法(已测试并确认这些工作)

  1. 重复上述步骤,但启动你的Python应用程序时不带

    dev_appserver.py
    。我用 Flask 测试了它,它起作用了(我用我们的 App 测试了它,但这是我在测试中使用的功能的底层代码)

  2. 第二个选项是使用 NDB 的 Bundled API(有关设置,请参阅 docs)。如果您采用此方法,则无需显式启动/启用数据存储模拟器。当您不在生产中运行时,此方法将自动使用本地数据存储,并且当您在谷歌云上运行时将连接到生产数据


0
投票

第一个参数

ndb.Client(gae_project_name)

是项目名称。我在本地运行时将其设置为不同的值,以确保我不会意外访问生产环境。

© www.soinside.com 2019 - 2024. All rights reserved.