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

时间:2016-03-13 18:13:47

标签: go yaml cloudfoundry buildpack pivotal-cloud-foundry

我有一个简单的GO服务器,我试图推送到Bosh lite上的云代工厂(Vagrant + Virtual box。)

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

  • 〜/ workspace / src / github.com / me /(父目录)

    -Godeps

    -weight weight.go< - 主文件。

    manifest.yml

    Procfile

我的weight.go是一个收听9000的简单服务器。

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

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

2)Procfile看起来像这样。

worker: bin/weight

3)我使用默认的buildpack。

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
}

我确实得到随机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}

*固定IT:问题是在localhost上监听,我没有指定IP,我很高兴*

1 个答案:

答案 0 :(得分:2)

来自Cloud Foundry的故障排除文档:

  

确保您的应用程序代码使用PORT环境变量。您的应用程序可能会失败,因为它正在侦听错误的端口。不使用应用程序侦听的端口进行硬编码,而是使用PORT环境变量。 [Source]

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

  

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

因此,不是您的应用程序被硬编码为侦听端口9000,它应该侦听PORT环境变量指定的端口,如果未设置该环境变量,则可以默认为9000。