Предотвращение появления OSX firewall при разработке приложения AppEngine Go

В настоящее время я локально разрабатываю приложение AppEngine с использованием языка программирования Go. Моя операционная система Mac OS X 10.8.3.

Я поддерживаю сервер разработки AppEngine (dev_appserver.py) во время разработки. Каждый раз, когда я сохраняю один из файлов приложения (которые сервер отслеживает на предмет изменений), появляется диалоговое окно брандмауэра OS X, в котором говорится: "Вы хотите разрешить _go_app принимать входящие соединения?". Диалог виден менее секунды, прежде чем снова исчезнет.

Как я могу заставить его перестать появляться все время? Я пытался иметь явные правила в брандмауэре OS X как для приложения _go_app, так и просто для Python, чтобы принимать или отклонять входящие соединения, но не важно, что он продолжает (кратко) выскакивать.

2 ответа

Не знаю, если что-то изменилось, но я получаю эту ошибку, используя GCloud SDK в комплекте dev_appserver.py, (2019-02-03, MacOS Mojave/10.14, Google Cloud SDK 232.0.0) с Go 1.11.

С Go 1.11, привязка явно к localhost помогает:

host := ""
if os.Getenv("NODE_ENV") == "development" {
  host = "localhost"
  log.Printf("Binding to 'localhost' only for '%s'", envPurpose)
}

srv := &http.Server{
  Handler:      r,
  Addr:         fmt.Sprintf("%s:%s", host, port),
  WriteTimeout: 10 * time.Second,
  ReadTimeout:  10 * time.Second,
}

log.Fatal(srv.ListenAndServe())

РЕДАКТИРОВАТЬ: Но, хотя это предотвратило всплывающее окно "запретить / разрешить" при первом запуске, это не помогло при автоматическом перезапуске, если я не объявил явно обработчики в app.yaml файл. Понятно, что под капотом происходит больше всего.

Однако с "голым" app.yaml файлы, это работало так, как мне хотелось.

Поговорил с людьми из App Engine в группах Google, по-видимому, это исправлено в новейшей сборке SDK (1.8.1).

Я не получаю всплывающее окно брандмауэра при запуске goapp serve, но я понимаю, когда бегу go test со всем, что использует google.golang.org/appengine/aetest пакет. Чтобы это исправить, мне нужно было исправить два файла, чтобы заставить все тестовые серверы только слушать localhost, Я отправил запрос на извлечение, так что, возможно, это будет исправлено в апстриме: https://github.com/golang/appengine/pull/25

$GOPATH/src/google.golang.org/appengine/internal/main_vm.go строка 25; менять:

if err := http.ListenAndServe(":"+port, http.HandlerFunc(handleHTTP)); err != nil {
  log.Fatalf("http.ListenAndServe: %v", err)
}

чтобы:

host := ""
if IsDevAppServer() {
  host = "localhost"
}
if err := http.ListenAndServe(":"+port, http.HandlerFunc(handleHTTP)); err != nil {
  log.Fatalf("http.ListenAndServe: %v", err)
}

Мне тоже нужно было патчить $HOME/google-cloud-sdk/platform/google_appengine/lib/portpicker/portpicker/__init__.py строка 79:

sock.bind(('', port))

чтобы:

sock.bind(('localhost', port))
Другие вопросы по тегам