【问题标题】:Using Heroku Scheduler add-on with Golang app将 Heroku Scheduler 插件与 Golang 应用程序一起使用
【发布时间】:2017-01-03 11:38:56
【问题描述】:

我不知道如何在 Go 中使用 Heroku Scheduler 插件。

我想定期运行一个单独的 Go 文件,但我可以找到实现此目的的命令。

来自 Heroku 的文档 (https://devcenter.heroku.com/articles/scheduler),如果应用程序不是 Rails 应用程序,我应该使用 ruby​​ 脚本。但我不知道如何从那里运行 Go 文件。

【问题讨论】:

  • 为什么不在你的 web worker 中使用 worker dyno 或后台 goroutine? devcenter.heroku.com/articles/background-jobs-queueing
  • 我对调度程序很感兴趣,因为它每次都会使用不同的 IP 地址等衍生出一个新的 Dyno。
  • 我遇到了类似的问题。添加了一个 golang .exe,但由于服务器是 linux os,因此根据 heroku 技术支持,它不会在调度程序上运行。

标签: heroku go scheduler


【解决方案1】:

典型的模式是做这样的事情:

.
└── cmd
    ├── processX
    │   └── main.go
    └── web
        └── main.go

然后您将heroku.install 设置为["./cmd/..."],Heroku 编译并将这两个命令安装到bin 中,因此您得到bin/webbin/processXprocessX 只是一个占位符,无论目录名称如何包含主包的是生成的可执行文件的名称)。在上述情况下,您的Procfile 会说web: web,第一个web 是进程类型,第二个是可执行文件的名称。你会告诉调度程序运行的作业是processX

明确划分职责

【讨论】:

  • 对于不使用govendorglide的人,也可以使用环境变量GO_INSTALL_PACKAGE_SPEC进行设置
【解决方案2】:

我最终分叉了我的网络测功机使用的 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.
    }
}

然后,在调度程序插件中,我只需调用:my-app-name "my_job_param"。这很 hacky,但我想使用 Scheduler 插件找到解决方案。

【讨论】:

  • 这行得通,但我建议改用多个cmd/ 目录。我发布了一个解释该方法的答案。
【解决方案3】:

Heroku 调度程序基本上可以运行任何终端命令。因此,例如,如果您将脚本编译为名为 myscript 的可执行文件,您可以简单地输入:

myscript

在调度程序中,它将执行该命令,从而运行您的脚本 =) 不需要 ruby​​。

【讨论】:

  • 这适用于 bash 脚本,但我想运行 go 脚本,而 go 命令似乎无法在 Heroku 服务器上运行。
  • 获得状态 127. 嘘
  • .exe 显然无法在 linux 上运行
猜你喜欢
  • 2015-01-17
  • 2018-02-09
  • 2013-12-27
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多