page:guides:flask:schema changes
Apply Database Schema Changes for Flask
Summary
Apply database schema changes for a Flask app on Ample with a release command. python3 migrate.py runs against the injected DATABASE_URL before the new release goes live, and the release fails instead of activating if the migration fails.
Resource Requirements
- Compute
- Postgres
Prerequisites
- A migration command that reads DATABASE_URL and exits non-zero on failure
- A PostgreSQL database (supplied or managed)
- An Ample account token with servers:write and databases:read
Workflow Steps
- Write an idempotent migration
Create tables and markers with IF NOT EXISTS or a migration framework so a re-run is safe. - Deploy with the release command
Ample runs the command before activation; a non-zero exit fails the release.ample deploy . --name <app_name> --public --start "python3 run.py" --release-command "python3 migrate.py" - Verify the marker through the app
Serve a route (/migrated) that reads something only the migration creates. - Verify
Fetch the live URL and run the success checks below. On failure read the build log, then the runtime log, fix the cause and deploy again; do not blind-retry.ample logs <app_name> --kind build
Example
Flask release-command canarypython3 migrate.py runs before activation against the auto-provisioned managed database.
Success Checks
- Migration marker is readable
- Kind: http_get
- Path: /migrated
- Expect: migrated=release-ok
Limitations
- Verified on the node-22 template at s-1vcpu-1gb; other templates and sizes are not verified by this recipe.
- Apps auto-pause when idle and wake on the next request; always-on is an operator setting, not a plan feature.
- The release command runs once per release on the app VM; there is no separate migration runner or rollback of a partially applied migration.
Cost Estimate
- Monthly Amount: $10.00 (USD)
- App Server
- Size: s-1vcpu-1gb
- Monthly Amount: $5.00
- Managed PostgreSQL Database
- Size: s-1vcpu-1gb
- Monthly Amount: $5.00
- App Server
Next Actions
- Browse the catalog index
- Method: GET
- Relative Path: /v1/catalog
- Search published recipes by intent, stack and constraints
- Method: POST
- Relative Path: /v1/catalog/search
- Prepare a side-effect-free deployment plan for an authorized project
- Method: POST
- Relative Path: /v1/catalog/plan