使用dispatch.yaml在appengine模块中进行静态目录管理

时间:2013-10-20 10:20:49

标签: python google-app-engine yaml python-module

我目前正在使用模块,这是一个相对较新的概念,用于子域路由的appengine。 一切正常,除了样式表和图像等静态资源似乎只在“默认”模块加载而不是我正在使用的“admin”模块。

默认模块的yaml文件,app.yaml是: -

    application: check4se
    version: v1
    runtime: python27
    api_version: 1
    threadsafe: true

    automatic_scaling:
     max_idle_instances: 20

    handlers:


   - url: /stylesheets
     static_dir: stylesheets
     expiration: "1s"

   - url: /images
     static_dir: images
     expiration: "1s"

   - url: /js
     static_dir: js


   - url: .*
     script: Main2.app

    libraries:
     - name: jinja2
     version: latest

模块管理员的admin.yaml如下: -

     application: check4se
     module: admin
     version: v1
     runtime: python27
     api_version: 1
     threadsafe: false

     automatic_scaling:
     min_idle_instances: 2

     handlers:

     - url: .*
       script: admin.app


     - url: /_ah/login_required
       script: do_openid_login.py

我使用dispatch.yaml将所有静态资源路由到我的默认模块: -

      application: check4se

      dispatch:


      - url: "admin.check4se.appspot.com/*"
        module: admin

      - url: "*/images"
        module: default

      - url: "*/stylesheets"
        module: default

      - url: "*/js"
        module: default

问题和解决方法是什么。

1 个答案:

答案 0 :(得分:3)

我认为admin.yaml中的。*处理程序与/ _ah / login_required路径匹配,因此/ _ah / login_required路径永远不匹配,从不调用do_openid_login.py。

相反,将/ _ah / login_required处理程序放在。*处理程序之前。

 application: check4se
 module: admin
 version: v1
 runtime: python27
 api_version: 1
 threadsafe: false

 automatic_scaling:
 min_idle_instances: 2

 handlers:

 - url: /_ah/login_required
   script: do_openid_login.py

 - url: .*
   script: admin.app

此外,您可能遇到与dispatch.yaml类似的问题

您可能希望首先放置静态资源路径,否则管理域上的任何内容都将转到管理资源,而不是默认资源。

  application: check4se

  dispatch:

  - url: "*/images"
    module: default

  - url: "*/stylesheets"
    module: default

  - url: "*/js"
    module: default

  - url: "admin.check4se.appspot.com/*"
    module: admin