Каждый запрос дважды попадает на сервер в Appengine - PullRequest
1 голос
/ 11 марта 2011

У меня есть небольшое приложение в appengine. Каждый запрос дважды попадает на сервер моего локального сервера разработки.
В режиме отладки я вижу, что метод get вызывается дважды.
Это происходит в браузерах Chrome и Firefox. вот лог с моего локального сервера ..

INFO     2011-03-12 00:44:31,076 dev_appserver.py:3317] "GET /movie/tanu_weds_manu/rating-review-video HTTP/1.1" 200 -
INFO     2011-03-12 00:44:32,345 dev_appserver.py:3317] "GET /css/fb.css HTTP/1.1" 200 -
INFO     2011-03-12 00:44:32,588 dev_appserver.py:3317] "GET /css/wianga-movie.0.1.css HTTP/1.1" 200 -
INFO     2011-03-12 00:45:46,648 dev_appserver.py:3317] "GET /movie/tanu_weds_manu/rating-review-video HTTP/1.1" 200 -
INFO     2011-03-12 00:45:46,911 dev_appserver.py:3317] "GET /img/wianga-fb-50.gif HTTP/1.1" 200 -
INFO     2011-03-12 00:45:47,177 dev_appserver.py:3317] "GET /img/arrow_green.gif HTTP/1.1" 200 -
INFO     2011-03-12 00:45:47,470 dev_appserver.py:3317] "GET /image/movie/tanu_weds_manu HTTP/1.1" 200 -
INFO     2011-03-12 00:45:47,717 dev_appserver.py:3317] "GET /js/jquery.qtip-1.0.0-rc3.min.js HTTP/1.1" 200 -
INFO     2011-03-12 00:45:47,970 dev_appserver.py:3317] "GET /js/wianga.0.1.js HTTP/1.1" 200 -
INFO     2011-03-12 00:46:37,473 dev_appserver.py:3317] "GET /movie/tanu_weds_manu/rating-review-video HTTP/1.1" 200 -

Обновлено : Становится все хуже, я проверял журналы в консоли приложения. Там он бьет более 3 раз для запроса.

handlers:
- url: /favicon.ico
  static_files: static/img/favicon.ico
  upload: static/img/favicon.ico
- url: /robots.txt
  static_files: static/robots.txt
  upload: static/robots.txt
- url: /img
  static_dir: static/img
- url: /images
  static_dir: static/images
- url: /css
  static_dir: static/css
- url: /js
  static_dir: static/js
- url: /image/.*
  script: /wianga/pages/common/ImageController.py
- url: /task/.*
  script: /wianga/pages/task/TaskController.py
- url: /browse/.*
  script: /wianga/site/Browse.py
- url: /movie/(.*)/rating-review-video/
  script: /wianga/site/MoviePage.py
- url: /movie/(.*)/rating-review-video
  script: /wianga/site/MoviePage.py
- url: /404
  script: /wianga/404/404.py
- url: /api/.*
  script: /wianga/api/ApiController.py
- url: /.*
  script: /wianga/site/Home.py   

Я получаю такое же поведение в приложении hellowrld от appengine turorial ... app.yaml

version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py

Журнал для примера hello world для одного запроса ...

INFO     2011-03-12 06:08:06,299 dev_appserver_main.py:507] Running application wianga-movie on port 8080: http://localhost:8080
INFO     2011-03-12 06:08:12,506 dev_appserver.py:3317] "GET / HTTP/1.1" 200 -
INFO     2011-03-12 06:08:13,721 dev_appserver.py:3317] "GET / HTTP/1.1" 200 -
INFO     2011-03-12 06:08:13,838 dev_appserver.py:3317] "GET /favicon.ico HTTP/1.1" 200 -
INFO     2011-03-12 06:08:13,953 dev_appserver.py:3317] "GET / HTTP/1.1" 200 -

1 Ответ

3 голосов
/ 12 марта 2011

Когда я настраивал свой app.yaml, я только что пролистал эту страницу: http://code.google.com/appengine/docs/python/config/appconfig.html Вы должны думать как парсер регулярных выражений.Все, что не соответствует предыдущим выражениям, попадет в ваш шаблонный обработчик и вызовет странность.

Одна вещь, которую я заметил, состоит в том, что вы должны добавить login: admin в обработчик очереди задач.Это предотвратит случайное попадание внешних запросов на этот URL.

Кроме того, когда вы отправляете задачи своему обработчику, если вы не включите косую черту (/task?blah=something вместо /task/?blah=something), запрос будет перенаправлен вашему обработчику подстановочных знаков и будет отправлен в Home.py.Это также может произойти для /image/, /browse/ и /api/.Вы должны помещать протоколирование вызовов в эти обработчики, чтобы гарантировать, что они будут вызываться, когда ожидается.

Ничто не выскакивает из меня, как, очевидно, неправильно в вашем app.yaml.Но поскольку в вашем журнале отображаются GET, это указывает на то, что что-то запрашивает этот URL, и это не просто метод get, вызываемый дважды изнутри.

Edit:

Hold onсекунду, только что заметил, что у вас есть это в вашем app.yaml дважды.Вам не нужно этого делать.

- url: /movie/(.*)/rating-review-video/ 
  script: /wianga/site/MoviePage.py 
- url: /movie/(.*)/rating-review-video 
  script: /wianga/site/MoviePage.py`

Попробуйте заменить на:

- url: /movie/(.*)/rating-review-video.*
  script: /wianga/site/MoviePage.py`

Edit2:

Попробуйте добавить это в начало вашего getМетод:

 logging.info('environ: ' + str(self.request._environ))

Вставьте вывод в beautifier (http://jsbeautifier.org/), чтобы сделать его более читабельным, и посмотрите на параметры REQUEST_METHOD, QUERY_STRING, HTTP_USER_AGENT, HTTP_COOKIE, PATH_INFO и HTTP_REFERчтобы увидеть, откуда на самом деле поступают запросы.Если они все приходят из вашего браузера, то в вашем html есть что-то странное, например, скрытые iframes (вы используете Channel API?).

Также попробуйте перейти на http://localhost:8080/_ah/admin/queues и убедиться, чтонет каких-то старых заданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...