Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Heroku Scheduler add-on with Golang app

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.

like image 488
Bastien Beurier Avatar asked Jan 06 '23 11:01

Bastien Beurier


2 Answers

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.

like image 117
Bastien Beurier Avatar answered Jan 12 '23 18:01

Bastien Beurier


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

like image 45
freeformz Avatar answered Jan 12 '23 20:01

freeformz