【问题标题】:Appengine module: Routing with dispatch.yaml not workingAppengine 模块:使用 dispatch.yaml 进行路由不起作用
【发布时间】:2014-11-16 15:53:38
【问题描述】:

我正在使用模块,但我无法按照此处https://developers.google.com/appengine/docs/python/modules/routing 的说明进行路由工作

更新:

appcfg.py update dispatch.yaml app.yaml comunapp_site.yaml

appcfg.py update_dispatch

端点 api 按预期工作,但站点没有 我希望这能工作

https://skilled-cargo-111.appspot.com/comunapp/

但只有这样才有效

https://comunapp-dot-skilled-cargo-111.appspot.com/

这是我的 yaml 文件:

app.yaml

application: skilled-cargo-111
module: default
version: 1
runtime: python27
api_version: 1
threadsafe: yes    

automatic_scaling:
  min_idle_instances: 1
  max_pending_latency: 3s    

handlers:
- url: /_ah/spi/.*
  script: mobile_api.application   

libraries:
- name: endpoints
  version: 1.0

comunapp_site.yaml

application: skilled-cargo-111
module: comunapp
version: 1
runtime: python27
api_version: 1
threadsafe: yes

automatic_scaling:
  min_idle_instances: 1
  max_pending_latency: 10s

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /css
  static_dir: css

- url: /bootstrap
  static_dir: bootstrap

- url: /images
  static_dir: images

- url: /javascript
  static_dir: javascript


#- url: /login.*
#  script: "main.py"
#  secure: always

- url: /.*
  script: comunapp_site.app
  login: optional
  secure: always

libraries:
- name: webapp2
  version: "2.5.2"
- name: jinja2
  version: latest

dispatch.yaml

application: skilled-cargo-111

dispatch:
  - url: "*/favicon.ico"
    module: default

  - url: "*/comunapp/*"
    module: comunapp

  - url: "*/api/*"
    module: default

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    发生的情况是,您的调度文件说要将任何到达 hostname/comunapp/* 的请求路由到您的 comunapp 处理程序,但到达该处理程序的 URL 是skilled-cargo-111.appspot.com/comunapp/ 类型,而您可能只为 / 路径设置处理程序,就像使用默认模块一样。

    如果您使用的是 Python,请尝试将您的代码更新为:

    comunapp = webapp2.WSGIApplication([
        ('/comunapp/*', ComunApp),
    ], debug=True)
    

    它应该可以解决问题。

    同样对于“api”路径,您应该在默认模块代码中添加“/api/”处理程序。

    您可以通过在开发者控制台中检查 comunapp 模块的日志来检查调度文件是否正常工作。如果您看到对 /comunapp/* URL 的请求但收到 404 错误,这就是我之前提到的。如果您在 comunapp 模块日志中看不到任何这些 URL,那么调度文件是解决问题的关键。

    【讨论】:

    • 是的,这就是解决方案。非常感谢
    • 我遇到了完全相同的问题,除了我使用的是 Flask 应用程序(使用 comunapp = flask.Flask('application') 定义的应用程序,使用 comunapp.add_url_rule('/comunapp/foo', view_func=foo) 定义的路由。知道如何将此解决方案转换为我的使用案例?
    • 找到答案:我将 dispatch.yaml 中的条目颠倒了。事实证明,规则顺序很重要。
    • 回想起来似乎很简单,但我什至没有想到。谢谢!
    猜你喜欢
    • 2015-12-28
    • 2016-11-06
    • 1970-01-01
    • 2015-07-27
    • 2016-11-23
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多