我的 Go 服务器无法在代工厂启动



我有一个简单的GO服务器,我正在尝试将其推送到Bosh lite上的Cloud Foundry(Vagrant + Virtual box)。

这是我的go应用程序的源代码设置:

  • ~/workspace/src/github.com/me/( parent directory)

    -戈德普斯

    -重量weight.go <-- 主文件。

    清单.yml

    Procfile

我的weight.go是一个简单的服务器,可以监听9000。

1)manifest.yml看起来像这样。

applications:
- name: weight
  memory: 128MB
  instances: 1

2)Procfile看起来像这样。

worker: bin/weight

3 ) 我使用默认构建包。

4 ) 当我使用 cf push weight-c "./bin/weight;sleep 1d" 推送我的应用程序时,我得到:

a-424e-b509-6df11fb32cc7 ({"state"=>"STOPPED"})
2016-03-13T11:02:45.70-0700 [DEA/0]      OUT Got staging request for app with id 16d3795a-8cda-424e-b509-6df11fb32cc7
2016-03-13T11:02:46.84-0700 [API/0]      OUT Updated app with guid 16d3795a-8cda-424e-b509-6df11fb32cc7 ({"state"=>"STARTED"})
2016-03-13T11:02:46.89-0700 [STG/0]      OUT -----> Downloaded app package (12K)
2016-03-13T11:02:48.76-0700 [STG/0]      OUT -----> Downloaded app buildpack cache (78M)
2016-03-13T11:02:48.82-0700 [STG/0]      ERR Cloning into '/tmp/buildpacks/go-buildpack'...
2016-03-13T11:03:05.66-0700 [STG/0]      OUT Submodule 'compile-extensions' (https://github.com/cloudfoundry/compile-extensions.git) registered for path 'compile-extensions'
2016-03-13T11:03:05.68-0700 [STG/0]      ERR Cloning into 'compile-extensions'...
2016-03-13T11:03:07.59-0700 [STG/0]      OUT Submodule path 'compile-extensions': checked out '26a578c06a62c763205833561fec1c5c6d34deb6'
2016-03-13T11:03:07.61-0700 [STG/0]      OUT -------> Buildpack version 1.7.3
2016-03-13T11:03:09.81-0700 [STG/0]      OUT https://pivotal-buildpacks.s3.amazonaws.com/concourse-binaries/godep/godep-v55-linux-x64.tgz
2016-03-13T11:03:09.88-0700 [STG/0]      OUT -----> Checking Godeps/Godeps.json file.
2016-03-13T11:03:09.92-0700 [STG/0]      OUT -----> Using go1.5.3
2016-03-13T11:03:09.92-0700 [STG/0]      OUT -----> Running: godep go install -tags cloudfoundry .
2016-03-13T11:03:11.19-0700 [STG/0]      OUT -----> Uploading droplet (2.0M)
2016-03-13T11:03:25.11-0700 [DEA/0]      OUT Starting app instance (index 0) with guid 16d3795a-8cda-424e-b509-6df11fb32cc7
2016-03-13T11:03:34.93-0700 [DEA/0]      OUT Removing crash for app with id 16d3795a-8cda-424e-b509-6df11fb32cc7
2016-03-13T11:03:34.93-0700 [DEA/0]      OUT Stopping app instance (index 0) with guid 16d3795a-8cda-424e-b509-6df11fb32cc7
2016-03-13T11:03:34.93-0700 [DEA/0]      OUT Stopped app instance (index 0) with guid 16d3795a-8cda-424e-b509-6df11fb32cc7
2016-03-13T11:03:56.81-0700 [DEA/0]      OUT Starting app instance (index 0) with guid 16d3795a-8cda-424e-b509-6df11fb32cc7
**2016-03-13T11:03:57.79-0700 [DEA/0]      ERR Instance (index 0) failed to start accepting connections**
2016-03-13T11:03:57.80-0700 [API/0]      OUT App instance exited with guid 16d3795a-8cda-424e-b509-6df11fb32cc7 payload: {"cc_partition"=>"default", "droplet"=>"16d3795a-8cda-424e-b509-6df11fb32cc7", "version"=>"2eeebbf8-e84e-412a-aeba-2adc0cffea6b", "instance"=>"910eba711c6e414bb7c6324565d0a9af", "index"=>0, "reason"=>"CRASHED", "exit_status"=>127, "exit_description"=>"failed to accept connections within health check timeout", "crash_timestamp"=>1457892237}

我试过设置

cf set-env weight PORT 9000

没有成功,我是否在用清单和 yaml 做一些时髦的事情?

weight.go 在本地运行。

法典:

func main (){
    http.HandleFunc("/weight", weightHandler)
    err:=http.ListenAndServe("localhost:"+getPort(), nil)
    if err != nil {
        fmt.Println("got an err ")
        log.Fatalln(err)
    }else{
        fmt.Println("Apparently it works ?")
    }
    //fmt.Println("Hi")
    //time.Sleep(1*time.Hour)
}
func getPort() string {
    var port string
    if port = os.Getenv("PORT"); len(port) == 0 {
        fmt.Println("Didn't Found it")
        fmt.Println(port)
        port = DEFAULT_PORT
    }else{
        fmt.Println("Gotim")
        fmt.Println(port)
    }
    return port
}

我确实得到了随机端口 CF 分配的日志,仍然卡在

2016-03-13T16:58:40.90-0700 [API/0]      OUT App instance exited with guid e5d417bd-c38d-4239-aa61-e9ca67fce79a payload: {"cc_partition"=>"default", "droplet"=>"e5d417bd-c38d-4239-aa61-e9ca67fce79a", "version"=>"8d7e80b3-69d5-4c83-9d37-1159d5deeba8", "instance"=>"14223d325c204406b87a131c065c16cc", "index"=>0, "reason"=>"CRASHED", "exit_status"=>-1, "exit_description"=>"failed to accept connections within health check timeout", "crash_timestamp"=>1457913520}
*

修复了:问题是在本地主机上侦听,我没有指定IP,我很好 *

来自 Cloud Foundry 文档中

的故障排除:

确保应用程序代码使用 PORT 环境变量。应用程序可能失败,因为它侦听了错误的端口。不要对应用程序侦听的端口进行硬编码,而是使用 PORT 环境变量。[来源]

来自Cloud Foundry关于环境变量的文档:

应用程序应侦听请求的端口。Cloud Foundry 运行时为应用程序的每个实例动态分配一个端口,因此获取或使用应用程序端口的代码应通过 PORT 环境变量引用该端口。[来源]

因此,应用不应硬编码为侦听端口

9000,而应侦听 PORT 环境变量指定的端口,如果未设置该环境变量,则可以默认为 9000。

最新更新