App引擎读取模块之间的DataStore数据

时间:2014-10-16 23:05:46

标签: python google-app-engine google-cloud-datastore app-engine-ndb gae-module

我有一个应用程序分为5个模块(参见我漂亮的ascii艺术)每个都有自己的目录,就像this结构

      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设置更改为每个模块,以便能够在启动器中同时运行所有模块,我认为这可能是问题所在。但是如果我离开同一个目录,那么如何同时运行所有模块(我得到了#34; OperationalError:数据库被锁定&#34;错误) 这里有任何线索吗?

3 个答案:

答案 0 :(得分:2)

根据this answer from google cloud support,有3种方式。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我找到了答案,不理想,但有效。

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

显然,模型需要在每次更改时同步,但至少我可以在我的代码中继续前进

目录结构保持如下:

-- 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命令(source

python dev_appserver.py mod1\app.yaml mod2\app.yaml mod3\app.yaml mod4\app.yaml mod5\app.yaml

此网址中的Runnind

  

MOD1 =&GT;本地主机:8080

     

的Mod2 =&GT;本地主机:8081

     

MOD3 =&GT;本地主机:8082

     

MOD4 =&GT;本地主机:8083

     

MOD5 =&GT;本地主机:8084