Обработка / _ah / запуска маршрута NodeJs в Google App Engine - PullRequest
0 голосов
/ 24 ноября 2018

Я использую Google App Engine Стандартная среда для моего приложения NodeJs.Все работало нормально, пока я не зарегистрировал маршрут «/ *» в своем приложении Express, чтобы перехватывать все маршруты после моих начальных маршрутов, таких как «/», «/ login» и т. Д.После развертывания моего приложения на GAE я получил:

Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.

В моих журналах сборки App Engine:

enter image description here Мой app.yaml выглядит так: app.yaml

runtime: nodejs10
env: standard
service: default
health_check:
  enable_health_check: False
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

Цитирование из официальных документов GAE: https://cloud.google.com/appengine/docs/standard/nodejs/how-instances-are-managed

Запуск Каждый экземпляр службы создается в ответ на запрос на запуск,который является пустым HTTP-запросом GET к / _ah / start.App Engine отправляет этот запрос для создания экземпляра;пользователи не могут отправить запрос в / _ah / start.Экземпляры ручного и базового масштабирования должны ответить на запрос запуска, прежде чем они смогут обработать другой запрос.Запрос на запуск может использоваться для двух целей:

Для запуска программы, которая работает бесконечно, без принятия дальнейших запросов.Инициализировать экземпляр до того, как он получит дополнительный трафик.Ручное, базовое и автоматическое масштабирование запускается по-разному.Когда вы запускаете экземпляр масштабирования вручную, App Engine немедленно отправляет запрос / _ah / start каждому экземпляру.Когда вы запускаете экземпляр базовой службы масштабирования, App Engine позволяет ему принимать трафик, но запрос / _ah / start не отправляется экземпляру, пока он не получит свой первый пользовательский запрос.Несколько базовых экземпляров масштабирования запускаются только по мере необходимости для обработки увеличенного трафика.Автоматически масштабируемые экземпляры не получают никакого запроса / _ah / start.

Когда экземпляр отвечает на запрос / _ah / start с кодом состояния HTTP 200–299 или 404, он считается успешно запущенным иможет обрабатывать дополнительные запросы.В противном случае App Engine завершает работу экземпляра.Экземпляры ручного масштабирования перезапускаются немедленно, тогда как базовые экземпляры масштабирования перезапускаются только тогда, когда это необходимо для обслуживания трафика.

Я что-то упустил?Пожалуйста, помогите.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я решил эту проблему, зарегистрировав свой последний маршрут следующим образом:

app.get(/^(?!.*_ah).*$/,(req,res,next)=>{
})

по сравнению с моей предыдущей конфигурацией.

app.get('/*',(req,res,next)=>{
    })

Здесь я использовал negate regex . Благодарим за этот ответ SO

Цитирование из официальных документов GAE

Инициализация экземпляра до получения дополнительного трафика.Ручное, базовое и автоматическое масштабирование запускается по-разному.Когда вы запускаете экземпляр масштабирования вручную, App Engine немедленно отправляет запрос / _ah / start каждому экземпляру.

То, что делает вышеупомянутый обработчик маршрутов, это перехват всех маршрутов, кроме того, который начинается с _ah, которыйозначает, что _ah / start и _ah / stop не будут прослушиваться моим приложением, поскольку они используются движком Google App для регистрации приложения.

Надеюсь, это поможет кому-то в будущем.

Спасибо

0 голосов
/ 24 ноября 2018

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

env: standard
service: default
health_check:
  enable_health_check: False
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

Из них ресурсы могут быть релевантными, вы, похоже, хотите, чтобы 0,5 ГБ памяти для вашего приложения,Для этого вам потребуется конфигурация instance_class, выбрав хотя бы класс B4.В противном случае ваше приложение получает только B2 (с 256 МБ памяти).С Элементы времени выполнения и приложения :

По умолчанию : B2 назначается, если вы не указали класс экземпляра вместе с basic_scaling элемент или manual_scaling элемент.

Но это только подозрение.Возможно, вы захотите выкопать фактический журнал ошибок, соответствующий 500 ошибкам для запроса /_ah/start, надеюсь, он может точно определить основную причину сбоя (множество возможностей, нехватка памяти - только одна из них).Без него это только догадки.

Примечание: потенциально интересно: Как определить, относится ли страница документации Google App Engine к стандартной или гибкой среде

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