我一直在尝试创建一个包含各种模块的Google App Engine项目,每个模块都有不同的版本;但我无法让它发挥作用。
我浏览了google modules guide website上的所有内容,但他们对应用程序层次结构的描述非常模糊。我下载了一个简单的测试应用程序,看它是如何工作的(我无法开始工作)。
这是应用程序的结构: http://www.iteratorium.eu/stackoverflow/structure.jpg
整个东西都是拉链的: http://www.iteratorium.eu/stackoverflow/flask_app.zip
有三个模块:default,my-module和mobile-frontend,my-module和mobile-frontend在目录v_one和v_two中都有两个版本。每个版本都有自己的.yaml文件,其中包含一个处理程序(保持其简单以便进行测试)
结构至少是否正确?当我通过dev_appserver.py文件加载应用程序时,只要我没有加载同一模块的两个版本,一切都很好。在这种情况下,会发生这种情况:
me@MY_COMPUTER:~/flask_app$ python ~/google_appengine/dev_appserver.py dispatch.yaml app.yaml mobile-frontend/v_one/mobile-frontend.yaml my-module/v_one/my-module.yaml my-module/v_two/my-module.yaml
回溯结果及以下内容:
google.appengine.tools.devappserver2.errors.InvalidAppConfigError: Duplicate module: my-module
(两个版本都通过appcfg.py上传到appengine而没有任何错误,可能只有localhost服务器无法处理多个版本)
如果我只加载每个模块的一个版本,一切正常,但模块无法从lib目录导入任何内容。
通过浏览器访问http://localhost:8082/mobiler
会在终端中生成此内容:
from flask import Flask
ImportError: No module named flask
我在appengine_config.py文件中定义了lib文件夹的路径,但它似乎不适用于模块。那是我停下来决定来这里的地方,因为我甚至不确定结构是否正确,我可能会对此完全消失。
所以...我离我有多远?
答案 0 :(得分:1)
注意:开发服务器不允许您加载同一模块的不同版本
您需要将模块定义放在toplevel目录中,以便加载appengine_config.py。
考虑到你真的想要保持两个版本的代码分开,一个更好的应用程序组织将如下(只显示移动前端以保持简短):
root
|__ mobile-frontend
| |__ v_one
| |__ __init__.py
| |__ mobiler.py
| |__ v_two
| |__ __init__.py
| |__ mobiler.py
|__ appengine_config.py
|__ dispatch.yaml
|__ mobile_frontend_v_one.yaml
|__ mobile_frontend_v_two.yaml
让mobile_frontend_v_one.yaml有类似的东西:
handlers:
- url: .*/mobiler
script: mobile-frontend.v_one.mobiler.app
答案 1 :(得分:0)
也许你在appengine_config.py
做了一点点,尝试将其缩减为:
import sys
sys.path.insert(0, 'lib')