如何在Google App Engine中正确实现多个模块的多个版本?

时间:2014-06-22 18:10:26

标签: python google-app-engine flask

我一直在尝试创建一个包含各种模块的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文件夹的路径,但它似乎不适用于模块。那是我停下来决定来这里的地方,因为我甚至不确定结构是否正确,我可能会对此完全消失。

所以...我离我有多远?

2 个答案:

答案 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')