在Golang应用程序中使用Heroku调度程序附加组件
我不知道如何将Heroku调度程序插件与Go一起使用 我想定期运行一个单独的Go文件,但我可以找到实现这一点的命令在Golang应用程序中使用Heroku调度程序附加组件,heroku,go,scheduler,Heroku,Go,Scheduler,我不知道如何将Heroku调度程序插件与Go一起使用 我想定期运行一个单独的Go文件,但我可以找到实现这一点的命令 根据Heroku的doc(),如果应用程序不是Rails应用程序,我应该使用ruby脚本。但是我不知道如何从那里运行Go文件。Heroku调度程序基本上会运行任何终端命令。因此,例如,如果您将脚本编译成名为myscript的可执行文件,您可以简单地将: myscript 在调度程序中,它将执行该命令,从而运行脚本=)不需要ruby。我最终使用了与我的web dyno相同的main
根据Heroku的doc(),如果应用程序不是Rails应用程序,我应该使用ruby脚本。但是我不知道如何从那里运行Go文件。Heroku调度程序基本上会运行任何终端命令。因此,例如,如果您将脚本编译成名为
myscript
的可执行文件,您可以简单地将:
myscript
在调度程序中,它将执行该命令,从而运行脚本=)不需要ruby。我最终使用了与我的web dyno相同的
main
函数:
func main () {
if len(os.Args) >= 2 && os.Args[1] == "my_job_param" {
// Execute job.
} else {
// Set up my web server with port, router, etc.
}
}
然后,在Scheduler插件中,我只需调用:
my app name“my_job\u param”
。这是一个非常粗糙的问题,但我想使用Scheduler插件找到一个解决方案。典型的模式是执行以下操作:
.
└── cmd
├── processX
│ └── main.go
└── web
└── main.go
然后设置为[“/cmd/…]”
,Heroku将这两个命令编译并安装到bin中,这样就得到了一个bin/web
和一个bin/processX
(processX
只是一个占位符,无论包含主包的目录名是结果可执行文件的名称)。在上述情况下,Procfile
会说web:web
,第一个web
是进程类型,第二个是可执行文件的名称。您将告诉调度程序运行的作业是processX
这清楚地划分了职责为什么不能在web worker中使用worker dyno或后台goroutine?我对调度器很感兴趣,因为它每次都会衍生出一个新的Dyno,具有不同的IP地址等。我也有类似的问题。添加了一个golang.exe,但根据heroku技术支持,它不会在计划程序上运行,因为服务器是linux操作系统。这与bash脚本配合得很好,但我想运行go脚本,go命令似乎无法在heroku服务器上运行。获取状态127。booo.exe显然无法在linux上运行,但我建议改用多个
cmd/
目录。我发布了一个解释这种方法的答案。对于那些不使用govendo
或glide
的人,也可以使用环境变量GO\u INSTALL\u PACKAGE\u SPEC