【问题标题】:Prevent OSX firewall from popping up when developing AppEngine Go Application开发 AppEngine Go 应用时防止 OSX 防火墙弹出
【发布时间】:2013-06-28 18:10:42
【问题描述】:

我目前正在使用 Go 编程语言在本地开发 AppEngine 应用。我的操作系统是 Mac OS X 10.8.3。

我在开发过程中保持 AppEngine 的开发服务器 (dev_appserver.py) 运行。每次我保存我的一个应用程序文件(服务器正在监视更改)时,OS X 防火墙对话框都会弹出“你想允许 _go_app 接收传入连接吗?”。该对话框仅可见不到一秒钟,然后再次消失。

我怎样才能让它不再弹出?我已经尝试在 OS X 防火墙中为 _go_app 应用程序和简单的 Python 设置明确的规则来接受或拒绝传入的连接,但不管它(短暂地)弹出什么。

【问题讨论】:

标签: macos google-app-engine dev-appserver


【解决方案1】:

与 Google Groups 上的 App Engine 人员交谈,显然这已在最新版本的 SDK (1.8.1) 中得到修复。

【讨论】:

    【解决方案2】:

    当我运行 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))
    

    【讨论】:

      【解决方案3】:

      不知道是否发生了变化,但我在使用捆绑的 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 文件,它可以按我的意愿工作。

      【讨论】:

      • 已确认,绑定到 localhost 会抑制对话框。
      猜你喜欢
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 2019-03-14
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多