应用程序引擎读取模块之间的DataStore数据



我有一个分为5个模块的应用程序(请参阅我美丽的ascii艺术)每个模块都有自己的目录,就像这个结构

      AppEngine App     <--Here's the dispatch.yaml
 ---------------------
 |    |    |    |    |
 |    |    |    |    |
Mod1 Mod2 Mod3 Mod4 Mod5
 ^                     ^
 __Here's the models  |__ Here i wanna read the models
    .py file 
    with the __init__.py

NDB模型定义在一个模块中(例如mod1),我想在Mod5中读取一些数据,官方文档说这是可能的,但我做不到。我正在以这种方式导入模型

#this is in mod5 py file
import Mod1.models # No module named Mod1.models
from Path.Mod1 import models  #No module named Path.Mod1 
from Mod1 import models  #No module named Mod1 
from Mod1.models import specific_model  #No module named Mod1.models 
from Path.models import specific_model  #No module named Path.models 

我更改了每个模块的--storage_path设置,以便能够在启动器中同时运行所有模块,我认为这可能是问题所在。但如果我离开同一个目录,怎么能同时运行所有模块(我得到了"OperationalError:数据库被锁定"错误)这里有线索吗?

根据谷歌云支持的答案,有三种方法。

  1. 指向具有定义的单个文件的符号链接。。。当使用不同的操作系统时,这可能会变得棘手。根据Dan评论中链接的SO回答,GAE将目录的内容复制到目标目录
  2. 编写一个构建脚本,将模型定义复制到每个服务
  3. 手动将模型定义复制到每个服务

根据给定的信息,我想知道您是否在每个子目录中都缺少__init__.py文件。这将允许Python模块在这些目录中可用。看见https://docs.python.org/2/tutorial/modules.html#packages

你能共享目录中的文件结构吗?

我找到了一个答案,虽然不理想,但有效。

如果我克隆(A.K.A复制粘贴)Mod5文件夹中的models.py文件并删除--storage_path设置(数据库共享在开发服务器的同一临时文件夹中),我可以读取存储的数据。

显然,每次更改都需要同步模型,但至少我可以在代码中向前推进

目录结构如下:

-- Main (with the dispatch.yaml)
 |__ Mod1
 |      |__ model.py
 |      |__ app.yaml
 |      |__ specificMod1Code.py
 |      |______ Templates
 |      |______ js
 |      |______ css
 |      |______ img
 :
 :
 :
 |__ Mod5
        |__ model.py #equal that mod1
        |__ app.yaml #with the mod5 instace and stuff
        |__ specificMod5Code.py
        |______ Templates
        |______ js
        |______ css
        |______ img

要同时运行所有模块,必须在应用程序(源)的根目录中运行dev_appserver命令

python dev_appserver.py mod1app.yaml mod2app.yaml mod3app.yaml mod4app.yaml mod5app.yaml

在此URL的中运行

Mod1=>localhost:8080

Mod2=>localhost:8081

Mod3=>localhost:8082

Mod4=>localhost:8083

Mod5=>localhost:8084

相关内容

  • 没有找到相关文章

最新更新