Переход к / _ah / admin на локальном хосте приводит к неизвестной ошибке 404 - PullRequest
2 голосов
/ 13 марта 2012

В настоящее время я портирую свое приложение GAE на Python 2.7 и натолкнулся на некоторые интересные вещи, которые я постепенно смог понять по одному (Здравствуйте, aliased simplejson library!).Тем не менее, я в настоящее время затрудняюсь объяснить эту конкретную проблему.

Всякий раз, когда я перехожу к консоли администратора (http://localhost:8080/_ah/admin),, я получаю страницу 404. Это странно само по себе (раньше это работало просто отлично)), но это также не моя пользовательская страница 404. Это заставляет меня думать, что это основано на встроенных обработчиках, но я не уверен, что может быть причиной.

Другие забавные факты:

  • В моем app.yaml или где-либо еще нет попыток обработать /_ah/.*
  • В моем app.yaml ничего не изменилось, кроме обычного обработчика сценариев для WSGI
  • Не использовать федеративные логины
  • Со временем я включил почти все встроенные функции
  • Приложение развертывается правильно и без проблем
  • I 'используя GAE Launcher на OSX (незначительно, но в нем есть некоторые странные причуды)

Обновление

Вероятно, проще показать консольлоги того, что выходит. Это после того, как приложение полностью запустилось, и у меня есть попыткаed, чтобы перейти на страницу администратора дважды (ошибка ввода-вывода симпатична, и происходит только в первый раз):

[Master] [dev_appserver_multiprocess.py:650] INFO Running application mygaeapp on port 8081: http://localhost:8081
[Master] [dev_appserver_multiprocess.py:652] INFO Admin console is available at: http://localhost:8081/_ah/admin
[Master] [dev_appserver_multiprocess.py:901] DEBUG balancer to port 9000
[App Instance] [0] [py_zipimport.py:139] WARNING Can't open zipfile /Library/Python/2.7/site-packages/slimmer-0.1.30-py2.7.egg: IOError: [Errno 13] file not accessible: '/Library/Python/2.7/site-packages/slimmer-0.1.30-py2.7.egg'
[App Instance] [0] [py_zipimport.py:139] WARNING Can't open zipfile /Library/Python/2.7/site-packages/NoseGAE-0.2.0-py2.7.egg: IOError: [Errno 13] file not accessible: '/Library/Python/2.7/site-packages/NoseGAE-0.2.0-py2.7.egg'
[App Instance] [0] [recording.py:372] INFO Saved; key: __appstats__:012400, part: 67 bytes, full: 8780 bytes, overhead: 0.000 + 0.007; link: http://localhost:8081/_ah/stats/details?time=1331638312442
[App Instance] [0] [dev_appserver.py:2865] INFO "GET /_ah/admin HTTP/1.1" 404 -
[Master] [dev_appserver_multiprocess.py:901] DEBUG balancer to port 9000
[App Instance] [0] [recording.py:372] INFO Saved; key: __appstats__:020100, part: 67 bytes, full: 9196 bytes, overhead: 0.000 + 0.007; link: http://localhost:8081/_ah/stats/details?time=1331638320129
[App Instance] [0] [dev_appserver.py:2865] INFO "GET /_ah/admin HTTP/1.1" 404 -
[Master] [dev_appserver_multiprocess.py:901] DEBUG balancer to port 9000

Ответы [ 3 ]

7 голосов
/ 07 июля 2013

Если вы нашли этот ответ и используете App Engine SDK 1.7.6 или выше, URL по умолчанию изменился с localhost:8080/_ah/admin на localhost:8000.

1 голос
/ 02 апреля 2012

Итак, я наконец отследил это до чего-то, что прекрасно работает в Python 2.5, но ломается на Python 2.7 только с dev_appserver.

Чтобы включить и отключить режим обслуживания, мы переназначаем маршруты в экземпляре WSGIуказать новый набор URL-адресов, изменив поле app.router напрямую.Отключение этого пути кода путем проверки версии приложения позволяет /_ah/admin работать правильно.

0 голосов
/ 21 мая 2015

У меня была та же проблема из-за того, что я определил URL-фильтр в моем web.xml файле:

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Класс фильтра MyFilter имеет метод doFilter, как показано ниже:

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    String path = req.getRequestURI().substring(req.getContextPath().length());

    if (path.equals("/")) { // Welcome path
        request.getRequestDispatcher("/res/index").forward(request, response);
    } else if (path.startsWith("/static") || path.startsWith("/_ah")) { 
        // Static content or internal and admin stuff
        chain.doFilter(request, response); // Goes to default servlet.
    } else { // Jersey servlet controller
        request.getRequestDispatcher("/res" + path).forward(request, response);
    }

}

Часть кода выше, читающая || path.startsWith("/_ah"), решила мою проблему, потому что фильтр должен позволять проходам, начинающимся с /_ah, проходить без изменений.

Мне нужен был фильтр, чтобы Джерси мог работать без добавления всех моих путей REST к /res или чего-либо еще, указанного в web.xml.

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