Предотвращение появления 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))