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

mitkmikd  于 8个月前  发布在  PyCharm
关注(0)|答案(2)|浏览(93)

我正在尝试将Python 2.7 App Engine项目从NDB迁移到Cloud NDB,作为迁移到Python 3过程的一部分。
在遵循Cloud NDB migration instructions之后,现在只需像以前一样运行dev_appserver就可以访问云而不是本地服务器。我看到谷歌的说明,以确保一个访问本地数据,但我想我不明白如何使用这在实践中。
假设我必须使用Linux模拟器来防止这种情况,我运行带有--support_datastore_emulator true标志的dev_appserver。这将导致我的本地SQL数据成功转换为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(有或没有数据存储模拟器)访问本地数据而不是云?可悲的是,我现在花了几天时间试图使这项工作。

cclgggtu

cclgggtu1#

试试这个(通过终端而不是在app.yaml中指定环境变量)。
1.打开一个终端并按照说明启动数据存储模拟器
1.模拟器启动并运行后,在单独的终端中,运行dev_appserver.py命令
如果上述方法不起作用,则有2种解决方法(已测试并确认这些方法有效)
1.重复上述步骤,但启动python应用程序时不使用dev_appserver.py。我用Flask测试了它,它工作了(我用我们的App测试了它,但这是我在测试中使用的功能的底层代码)
1.第二种选择是使用NDB的捆绑API(有关设置,请参阅docs)。如果您走这条路,那么您不需要显式地启动/启用数据存储模拟器。当你不在生产环境中运行时,此方法将自动使用本地数据存储,当你在谷歌云上运行时,此方法将连接到生产数据

h22fl7wq

h22fl7wq2#

的第一个参数

ndb.Client(gae_project_name)

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

相关问题