GAE Backend- процесс завершен, поскольку он не смог ответить на запрос на запуск с кодом состояния HTTP 200-299 или 404

В Google App Engine Java я пытаюсь запустить серверную часть, но всегда получаю сообщение об ошибке в журнале серверной части.

Процесс завершен, поскольку он не смог ответить на запрос на запуск с кодом состояния HTTP 200-299 или 404.

Журналы App Engine

2014-12-07 11:06:31.944 /_ah/start 302 4842ms 0kb instance=0 module=default version=testservice
0.1.0.3 - - [06/Dec/2014:21:36:31 -0800] "GET /_ah/start HTTP/1.1" 302 231 - - "0.testservice.testapp.appspot.com" ms=4842 cpu_ms=7626 cpm_usd=0.000026 loading_request=1 exit_code=107 instance=0 app_engine_release=1.9.16 

com.test.AppFilter doGet: фильтр запущен..!

Этот запрос вызвал запуск нового процесса для вашего приложения и, таким образом, вызвал загрузку кода вашего приложения в первый раз. Таким образом, этот запрос может занять больше времени и использовать больше ресурсов процессора, чем обычный запрос для вашего приложения. E 2014-12-05 11:02:16.916

Процесс завершен, поскольку он не смог ответить на запрос на запуск с кодом состояния HTTP 200-299 или 404.

Пожалуйста помоги.

2 ответа

Решение

Когда запускается модуль (или предыдущая версия: backend), оркестровщик Google App Engine отправляет HTTP-запрос /_ah/start, Вы можете использовать этот HTTP-запрос для выполнения любой желаемой операции инициализации.

Этот HTTP-запрос, как объяснено в сообщениях журнала, должен возвращать код состояния HTTP либо между 200 а также 299 (что говорит о том, что запрос был правильно обработан) или 404 Not Found (что говорит о том, что вы не прикрепили ни один сервлет или фильтр к этому запросу).

Все это объясняется в документации Google на этой странице.

Здесь ответ был 302 Redirect, Обычно это инициируется фильтром безопасности, который перенаправляет на экран аутентификации.

Если вы определили пользовательский фильтр безопасности или сервлет, который обрабатывает /_ah/start URL, убедитесь, что он возвращает 200 HTTP код

Если вы установите <security-constraint> по этому URL (кроме принудительного SSL) удалите его.

      Process terminated because it failed to respond to the start request with an HTTP status code of 200-299 or 404.

Вышеупомянутое сообщение об ошибке — это уловка всего, что вызывает сбой при прогреве или запуске. По сути, если doGet /_ah/start не завершается одним из этих кодов состояния HTTP, генерируется эта ошибка.

При поиске основной причины я не понял, что сервлет /_ah/start не завершается первым (последовательно) до завершения процесса прогрева или инициализации контекста (CI). То есть инициализация контекста выполняется как зависимость стартового сервлета, а это означает, что если он (CI) завершится неудачей, весь запуск завершится неудачей, генерируя вышеуказанное сообщение.

К сожалению, сообщение не дает подсказки о том, в чем заключается основная причина. Если у вас есть прослушиватель контекста, например, помеченный как @WebListener, и метод contextInitialized(ServletContextEvent sce) не завершается успешно (сбой, генерирует трассировку стека), то эта проблема может быть основной причиной этой ошибки.

Самый простой способ обнаружить проблему — проверить журналы на наличие трассировки стека, начиная с предупреждающих сообщений в журнале. То есть посмотрите, не происходит ли сбой какого-либо кода запуска, прогрева или инициализации контекста. Если вы обнаружили проблему, исправьте ее.

Ниже приведен пример определения, работающего в конфигурации Java-Gen2 Legacy Bundled Services (после устранения проблем с инициализацией контекста).

      @WebServlet(name = "StartUpHttpHandlerServlet", description = "Startup Http Handler Servlet", urlPatterns = {"/_ah/start"})
public class StartUpHttpHandlerServlet extends HttpServlet  {

        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {        
        
            resp.setStatus(200);
        }
     }
 }

В этом документе хорошо описан процесс запуска, но не уточняется, что именно может вызвать приведенное выше сообщение об ошибке.

Другие вопросы по тегам