如何在 Google App Engine 中正确实现多个模块的多个版本?
Posted
技术标签:
【中文标题】如何在 Google App Engine 中正确实现多个模块的多个版本?【英文标题】:How to correctly implement multiple versions of multiple modules in Google App Engine? 【发布时间】:2014-08-12 19:11:40 【问题描述】:我一直在尝试创建一个包含各种模块的 Google App Engine 项目,每个模块都有不同的版本;但我无法让它工作。
我浏览了google modules guide website 上的所有内容,但他们对应用程序层次结构的描述非常模糊。我下载了一个简单的测试应用程序,看看它是如何工作的(我无法开始工作)。
这是应用程序现在的结构: http://www.iteratorium.eu/***/structure.jpg
整个事情都在这里压缩: http://www.iteratorium.eu/***/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 文件夹的路径,但它似乎不适用于模块。那是我停下来决定来这里的地方,因为我什至不确定结构是否正确,而且我可能无法完成所有这些。
那么...我离我还有多远?
【问题讨论】:
如您所说,问题在于本地开发服务器无法同时处理同一模块的版本。话虽如此,模块似乎没有运行 appengine_config.py,所以它们根本没有加载 Flask 【参考方案1】:注意:开发服务器不允许您加载同一模块的不同版本
您需要将模块定义放在顶层目录中才能加载 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
【讨论】:
不过,我宁愿不要在同一个代码库中播放不同的版本,并且会使用 git(因为您似乎已经在使用它)来跟踪不同的版本【参考方案2】:也许你在appengine_config.py
中做的太多了,试着把它减少到:
import sys
sys.path.insert(0, 'lib')
【讨论】:
以上是关于如何在 Google App Engine 中正确实现多个模块的多个版本?的主要内容,如果未能解决你的问题,请参考以下文章
Google App Engine 渲染和 Django 表单
首次使用Google App Engine使用Python创建留言板