使用Heroku部署Go App

时间:2017-02-08 23:04:23

标签: heroku go

我使用本指南构建了一个小型Go应用程序:

https://codegangsta.gitbooks.io/building-web-apps-with-go/index.html

文件夹结构如下所示:

go/src/fileserver/
                 main.go
                 fileserver.exe
                 public/
                       index.html
                       css/
                          bootstrap.min.css

部署说明提到" procfile"和#34; .godir"文件,但它有点不清楚这些应该包含什么或它们将在何处实施。我不太确定我的文件夹结构是否正确。

我得到的错误是:

 Failed to detect set buildpack https://github.com/kr/heroku-buildpack-go.git

1 个答案:

答案 0 :(得分:2)

我将大量引用heroku文档。

<强> Procfile

  

定义Procfile

     

使用Procfile(应用程序根目录中的文本文件)显式声明应该执行哪个命令来启动应用程序。   您部署的示例应用程序中的Procfile如下所示:

     

web: go-getting-started

     

这声明了一个进程类型,web和运行它所需的命令。网名在这里很重要。它声明此进程类型将附加到Heroku的HTTP路由堆栈,并在部署时接收Web流量。这里使用的命令go-getting-started是入门应用程序的编译二进制文件。   Procfiles可以包含其他流程类型。例如,您可以为后台工作进程声明一个进程,该进程处理队列中的项目。

Define a Procfile

因此,在您的示例中,您将在根目录中有一个名为“Procfile”的文件,其内容为:

web: fileserver

<强> .godir

.godir文件只是一个文件,它只是指定了go项目的根目录。当您说具有不同语言的Web应用程序的许多模块时,这非常有用。所以例如给出一个包含以下树的回购。

github.com
    └──someuser
       └── somerepo
           ├── .godir
           ├── go_module
           └── node_module

.godir文件的内容为:

github.com/someuser/somerepo/go_module

.godir可以找到$ import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) pulse = 0 distance = 0 rpm = 0.00 speed = 0.00 wheel_c = 20 hall = 18 elapse = 0.00 start = time.time() GPIO.setup(hall, GPIO.IN, pull_up_down = GPIO.PUD_UP) def get_rpm(): return rpm def get_speed(): return speed def get_distance(): return distance def get_elapse(): return elapse def get_pulse(number): global elapse,distance,start,pulse,speed,rpm,multiplier cycle = 0 pulse+=1 cycle+=1 if pulse > 0: elapse = time.time() - start pulse -=1 if cycle > 0: distance += wheel_c cycle -= 1 speed = (wheel_c*multiplier)/100000 rpm = 1/elapse *60 start = time.time() try: time.sleep(1) GPIO.add_event_detect(hall,GPIO.FALLING,callback = get_pulse,bouncetime=20) while True: print('rpm:{0:.2f} speed:{1:.2f} distance:{2} elapse:{3:.4f}'.format(rpm,speed,distance,elapse)) time.sleep(0.1) #to reduce CPU load, print every 100 milliseconds except KeyboardInterrupt: print('You have pressed Ctrl+C! How dare you stopped this beautiful thing?!') GPIO.cleanup() $ 的用途及其使用时间的详细解释{/ 3}}。