page:guides:django:schema changes
Apply Database Schema Changes for Django
Summary
Apply database schema changes for a Django app on Ample with a release command. python3 manage.py migrate runs against the injected DATABASE_URL before the new release goes live, and the release fails instead of activating if the migration fails.
Workflow Steps
1. Write an Idempotent Migration
Create tables and markers with IF NOT EXISTS or a migration framework so a re-run is safe.
2. Deploy with the Release Command
Ample runs the command before activation; a non-zero exit fails the release.
Command: ample deploy . --name <name> --public --start "python3 run.py" --release-command "python3 manage.py migrate"
3. Verify the Marker Through the App
Serve a route (/migrated) that reads something only the migration creates.
4. 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.
Command: ample logs <log-identifier> --kind build
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:writeanddatabases:read
Tested Configuration
- Template: python-3.12
- Runtime: python
- Size: s-1vcpu-1gb
- Install:
python3 -m pip install --target .ample/python -r requirements.txt - Start:
PYTHONPATH=.ample/python:${PYTHONPATH:-} python3 run.py
Success Checks
- Check: 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.
- Region, compliance attestations and request-duration limits are unknown and not claimed.
- Apps auto-pause when idle and wake on the next request; always-on is an operator setting, not a plan feature.
- Managed PostgreSQL 16 only; extensions, connection limits and backup or restore procedures are not verified.
- Apps and their managed databases are placed together; cross-node shared databases are unsupported.
- 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
- Currency: USD
- Monthly Amount: 10.0
- Basis: size prices from pricing.toml (loaded by the API) at build revision 1ac5595375130d45290090e82ed0f554ccd45405-dirty
- Components:
- App Server: s-1vcpu-1gb - $5.00
- Managed PostgreSQL Database: s-1vcpu-1gb - $5.00
- Components:
- Note: Apps and managed databases auto-pause when idle; the estimate is the always-on monthly price of the tested sizes. Plan quotas and budgets apply.
Examples
- Django Release-command Canary:
python3 manage.py migrateruns before activation against the auto-provisioned managed database.
Additional Information
- For detailed documentation, visit here.