如何在 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 一起上传图片

首次使用Google App Engine使用Python创建留言板

如何在 Google App Engine app.yaml 中处理尾部斜线

Google App Engine 不提供静态文件

如何在 Google App Engine 中执行全文搜索?