fix(gancio): pre-start config-init sidecar prevents restart loop
Gancio refuses to start when its DB has tables but the data volume has no
config.json ("Non empty db! Please move your current db elsewhere than retry"),
which produces an infinite restart loop. This hit production tenants bnkops
and trbh (>1200 restart cycles each) — proximate cause was a missing
config.json in changemakerlite_gancio-data with the DB fully populated.
Add gancio-config-init alpine sidecar that runs on every `up`:
- no-op when config.json exists
- regenerates from .env when missing (1000:1000 ownership)
- gancio service now depends on its service_completed_successfully
Also harden verify_gancio_config in upgrade.sh to error loudly when
multiple gancio-data volumes match (silent head -1 could pick the wrong
one after a compose project rename).
This commit is contained in:
@@ -188,11 +188,22 @@ restore_user_paths() {
|
||||
# "Non empty db! Please move your current db elsewhere than retry."
|
||||
# This regenerates config.json from .env vars when missing.
|
||||
verify_gancio_config() {
|
||||
local gancio_volume
|
||||
gancio_volume="$(docker volume ls --format '{{.Name}}' | grep 'gancio-data' | head -1 || true)"
|
||||
if [[ -z "$gancio_volume" ]]; then
|
||||
# Note: as of the gancio-config-init sidecar in docker-compose{,prod}.yml,
|
||||
# config.json is regenerated automatically on every `up`. This function is
|
||||
# kept as belt-and-braces for the upgrade flow specifically (e.g. so the
|
||||
# check happens before the compose-up rather than at compose-up time, and
|
||||
# so operators see explicit log output during upgrade).
|
||||
local matches
|
||||
matches="$(docker volume ls --format '{{.Name}}' | grep 'gancio-data' || true)"
|
||||
local count
|
||||
count=$(printf '%s\n' "$matches" | grep -c '.' || true)
|
||||
if [[ "$count" -eq 0 ]]; then
|
||||
return # No gancio volume exists yet; first run will handle it
|
||||
fi
|
||||
if [[ "$count" -gt 1 ]]; then
|
||||
error "Multiple gancio-data volumes found — refusing to guess. Resolve manually:\n$matches"
|
||||
fi
|
||||
local gancio_volume="$matches"
|
||||
|
||||
# Check if config.json exists and is non-empty
|
||||
if docker run --rm -v "${gancio_volume}:/data" alpine test -s /data/config.json 2>/dev/null; then
|
||||
|
||||
Reference in New Issue
Block a user