New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue when path is symlink #20
Comments
Since you're deploying to |
In the past, I've just used S3 with versioning enabled to store binaries, and an S3 rollback will result in an overseer "upgrade" (actually a downgrade). #19 will add a File Fetcher, though it also just checks a single path so it still wouldn't match your workflow. Maybe the easiest thing to do is make a custom |
yes, I'm only using overseer as a graceful restart that plays well with upstart/systemd/etc I'll look into the Fetcher idea, I assume it means, I keep deploying to |
Okay no worries. Note: you can also omit the overseer.Run(overseer.Config{
Program: prog,
Address: ":3000",
}) Then in your app, you could poll the symlink for changes, or you could expose an HTTP endpoint, and then call |
I remembered that the way our servers are setup, the actual go binary doesn't have write access to the path where it is deployed, which means I cannot go with the Fetcher idea (unless I update our folder permissions, which I would like to avoid). Because our go app isn't the only app we run, we would like to keep ansible as the one place where deployments happen from, and keep our apps away from the deployment logic. I ended up making these changes to
and now upstart passes the env variable to our go app telling it to always run from I can keep this in our own fork if it doesn't seen aligned with your original idea for overseer. Thanks for a great tool! |
At work, our deployment goes something like this:
copy go binary to
/srv/tools//binary-here
then create/update an symlink so that we have:
/srv/tools/current
=>/srv/tools/<last-build-id>
This lets us quickly revert to a previous version if things go wrong and we didn't detect any issues during testing.
Because overseer uses github.com/kardianos/osext to detect the "real" path to the binary that is running and needs to be restarted, sending a restart signal doesn't restart the new binary, but it restarts the "old" binary, the one with the specific build-id, instead of the one pointed by
current
Possible solutions:
.../current/
, and duplicate it at /srv/tools/, but doesn't seem too cleanenvBinPath = "OVERSEER_BIN_PATH"
, how about checking if this is set, and if is is, then use that instead of calling :so, it would be something like
I would be happy to send a PR if you find this idea useful, or maybe there is already a work around this.
The text was updated successfully, but these errors were encountered: