当前位置:  开发笔记 > 编程语言 > 正文

在应用程序结构方面,Google App Engine应用程序中的默认服务/模块可以是非默认服务/模块的兄弟吗?

如何解决《在应用程序结构方面,GoogleAppEngine应用程序中的默认服务/模块可以是非默认服务/模块的兄弟吗?》经验,为你挑选了1个好方法。

更新:这些天modules被称为services.

我想将项目的模块组织到各种子文件夹中,其中每个子文件夹包含与每个模块有关的代码.特别是,我希望包含默认模块的文件夹与其他模块处于同一级别(即它们都是兄弟姐妹).我按照模块文档中显示的图表:

图

但是,令我困惑的是语句" 重要:app.yaml文件必须位于应用程序的根目录中 ".这是否意味着默认模块(及其app.yaml)必须位于项目根目录中,因此是非默认模块的父项?



1> Dan Corniles..:

这些模块都可以并排.在.yaml为每一个可以是模块DIR内部.

关于app.yaml文件的说明具有误导性,它实际上仅适用于单模块应用程序(许多文档未针对多模块应用程序进行更新).

default模块的配置文件中甚至没有被调用app.yaml(或称为其目录default).我会保持应用程序级的配置文件(cron.yaml,dispatch.yaml,queue.yamlindex.yaml)在顶层,最终符号链接它们到默认(或其他)模块(S)根据需要(有些工具可能另有抱怨).

例如,这是我的一个应用程序所需的结构(maindir包含default模块):

cron.yaml
dispatch.yaml
queue.yaml
index.yaml
main/cron.yaml -> ../cron.yaml
main/index.yaml -> ../index.yaml
main/main.yaml
main/queue.yaml -> ../queue.yaml
buildin/buildin.yaml
buildin/index.yaml -> ../index.yaml
buildin/queue.yaml-> ../queue.yaml

您只需要在调用相关工具时注意.这是我的应用程序的备忘单,从应用程序的目录执行,其中一些也反映在pycharm项目配置中(我在pycharm中运行开发服务器):

appcfg.py update main/main.yaml buildin/buildin.yaml
appcfg.py update_dispatch .
appcfg.py update_indexes -A  main
appcfg.py update_cron -A  .
appcfg.py update_queues -A  .

要运行devserver:

dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml

更新:根据要求添加了一些配置文件.

dispatch.yaml文件buildin负责appspot域和我的自定义域上的模块路由(其他所有内容都自动路由到默认模块):

application: 
dispatch:
  - url: "buildin.my_domain.com/*"
    module: buildin
  - url: "buildin-dot-my_app.appspot.com/*"
    module: buildin
  - url: "*/buildin/*"
    module: buildin

main.yaml文件中:

application: my_app
module: default
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:

- url: /(.*\.min\.css)$
  static_files: stylesheets/\1
  upload: stylesheets/.*\.min\.css$
  secure: always

- url: /(.*\.(ico|gif|png|jpg|svg))$
  static_files: images/\1
  upload: images/.*\.(ico|gif|png|jpg|svg)$
  secure: always

- url: .*
  script: main.app
  secure: always

libraries:
- name: webapp2
  version: "2.5.2"
- name: jinja2
  version: "2.6"
- name: pycrypto
  version: "2.6"

buildin.yaml文件中:

application: my_app
module: buildin
version: 1
runtime: python27
api_version: 1
threadsafe: true
instance_class: B2

handlers:

- url: /(.*\.min\.js)$
  static_files: scripts/\1
  upload: scripts/.*\.min\.js$
  secure: always

- url: /(.*\.min\.css)$
  static_files: stylesheets/\1
  upload: stylesheets/.*\.min\.css$
  secure: always

- url: /(.*\.(ico|gif|png|jpg|svg))$
  static_files: images/\1
  upload: images/.*\.(ico|gif|png|jpg|svg)$
  secure: always

- url: /buildin/cron*
  script: buildin.app
  login: admin

- url: .*
  script: buildin.app
  secure: always

libraries:
- name: webapp2
  version: "2.5.2"
- name: jinja2
  version: "2.6"
- name: pycrypto
  version: "2.6"

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有