我使用本指南构建了一个小型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
答案 0 :(得分:2)
我将大量引用heroku文档。
<强> Procfile 强>
定义Procfile
使用Procfile(应用程序根目录中的文本文件)显式声明应该执行哪个命令来启动应用程序。 您部署的示例应用程序中的Procfile如下所示:
web: go-getting-started
这声明了一个进程类型,web和运行它所需的命令。网名在这里很重要。它声明此进程类型将附加到Heroku的HTTP路由堆栈,并在部署时接收Web流量。这里使用的命令go-getting-started是入门应用程序的编译二进制文件。 Procfiles可以包含其他流程类型。例如,您可以为后台工作进程声明一个进程,该进程处理队列中的项目。
因此,在您的示例中,您将在根目录中有一个名为“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}}。