Обнаружение сервера приложений для разработки в Go без автономного SDK App Engine?

Пакет Go, https://godoc.org/google.golang.org/appengine, предоставляет IsDevAppServer, который сообщает, запущено ли приложение App Engine на сервере приложений разработки (например,localhost:8080). Однако это не работает, если не используется (устаревший) автономный SDK. См. Реализацию на appengine.go#L57.

Новые приложения GAE, написанные на Go, в основном представляют собой обычный веб-сервер, который можно скомпилировать и запустить локально, как любую программу Go;

  • старый; dev_appserver.py
  • новый; go run main.go

Обнаружение сервера разработки может быть полезно для предотвращения проблем CORS при локальном запуске:

func setDevHeaders(w http.ResponseWriter) {
    w.Header().Set("Access-Control-Allow-Origin", "http://localhost:4200")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    w.Header().Set("Access-Control-Request-Method", "POST, GET")
    w.Header().Set("Access-Control-Expose-Headers", "Content-Disposition")
}

При необходимости я могу перейти:

if appengine.IsDevAppServer() {
    setDevHeaders(w)
}

Каков рекомендуемый способ добиться этого на автономном сервере Go, работающем на App Engine?

2 ответа

Решение

Среда App Engine Standard Go автоматически устанавливает ряд переменных среды. Вы можете посмотреть список здесь.

Вы можете проверить, установлены ли они, а если нет, то ваш код работает локально (или, по крайней мере, не развернут). Или вы можете установитьNODE_ENV переменная среды для developmentна вашем компьютере (в вашей оболочке, где вы запускаете приложение локально, а не в файле app.yaml) и проверьте его значение. Он будет установлен наproduction при работе в App Engine.

Это звучит сложно, но я обнаружил, что сервер метаданных также отвечает стандарту движка приложений.

Furthur, я использовал cloud.google.com/go/compute/metadata пакакге

      metadata.OnGCE()

в качестве быстрой проверки, находится ли он на моем локальном компьютере или на компьютере Google (да, он возвращает true на движке приложения)

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