我在App Engine(java)中略微“滥用”了前端“版本”概念,在它们被引入之前实现模块。我具有由的结构:module1-dot-myapp.appspot.com,module2-dot-myapp.appspot.com,module3-dot-myapp.appspot.com等,基于该版本概念(更通常与用于数字:1-dot-myapp等。)。
具体来说,所有版本中的代码都是相同的,但每个版本实际上都用于不同的目的。这种分离允许不同的客户端使用不同的api版本,单独的部署计划,登台版本,日志分离等。
我的问题是,在这些条件下,将我的应用程序转换为“真实”模块的最佳方法是什么?这样“module1”是一个实际的模块(仍然映射到同一个url - module1-dot-appspot.com)?
答案 0 :(得分:0)
注意:我的答案来自某种类似的练习,但在 python GAE运行时,也可能会看到特定于Java的特定内容。
要注意的第一件事(可能的显示停止者)是应用级配置 - 这些将需要从您的不同旧应用版本(如果它们存在)合并并且将是所有模块共享(或仅指向默认模块),因此它们可能无法像以前那样工作,最好重新访问有关这些配置的最新文档:
注意:在多模块python应用中,这些配置可能无法在应用上传时自动更新,每个都可能需要显式上传,使用相应的应用配置实用程序选项。
单独的部署计划几乎是免费的(每个模块可以独立部署)。但是由于应用级配置可能会产生一些影响(例如,多个CLI调用而不是单个调用)
日志分离是免费的。
可能需要重新审视分段故事,具体取决于您的具体含义。
除此之外 - 您将应用程序的不同旧版本带入新应用程序的单独模块子目录中。检查您的版本控制系统是否更容易支持。旧的app配置文件需要“翻译”到相应模块的配置文件中,并且一些信息将进入新应用程序的顶级dir配置文件。
模块URL路由应该允许透明的URL映射,但请注意,URL实际上是<module>-dot-<appname>.appspot.com
,获取完全相同的URL的唯一方法是删除所有旧的应用程序部署新版本之前的版本(由于网址冲突:<module>-dot-<appname>
vs <appversion>-dot-<appname>
,不确定您是否会收到旧代码或新代码,或者是否可以部署新代码而不会出错)。你可以先使用一个新的appname,只是为了让所有的鸭子在切换之前排好队列(可能是你可能会考虑进行的新的分段故事)。
如果之前没有调度文件,可能找到有用的补充URL路由。
最后,如果您在模块之间共享相同的文件,则可以考虑单个每个应用程序的文件副本,符号链接到相应的模块中,如果从源代码管理角度来看更容易或有意义。