在Golang应用程序中使用Heroku Scheduler附加组件

I can't figure out how to use the Heroku Scheduler add-on with Go.

I would like run a separate Go file periodically, but I can find the command to achieve that.

From Heroku's doc (https://devcenter.heroku.com/articles/scheduler), if the app is not a Rails app, I should use a ruby script. But I don't know how to run a Go file from there.

I ended up forking the same main function used by my web dyno:

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.
    }
}

Then, in the Scheduler add-on, I just call: my-app-name "my_job_param". It's pretty hacky, but I wanted to find a solution using the Scheduler add-on.

The Heroku scheduler will run any terminal command basically. So, if you compile your script into an executable called myscript, for example, you could simply put:

myscript

In the scheduler and it will execute that command, thereby running your script =) No ruby is required.

The typical pattern is to do something like:

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

And you set heroku.install to ["./cmd/..."] and Heroku compiles and installs both commands into bin, so you get a bin/web and a bin/processX (processX is just a placeholder, whatever the name of the directory that contains a main package is the name of the resulting executable). In the above case your Procfile would say web: web, the first web being the process type, the second being the name of the executable. And the job you would tell scheduler to run would be processX.

That cleanly separates responsibilities