我正在尝试将 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(带或不带数据存储模拟器)访问本地数据而不是云?可悲的是,我现在花了几天时间试图让这项工作成功。
尝试一下(通过终端执行此操作,而不是在 app.yaml 中指定环境变量)。
打开终端并按照说明启动数据存储模拟器
模拟器启动并运行后,在单独的终端中,运行
dev_appserver.py
命令
如果上述方法不起作用,则有 2 个解决方法(已测试并确认这些工作)
第一个参数
ndb.Client(gae_project_name)
是项目名称。我在本地运行时将其设置为不同的值,以确保我不会意外访问生产环境。