# Apply Database Schema Changes for React Router

Apply database schema changes for a React Router app on Ample with a release command. `node migrate.cjs` runs against the injected DATABASE_URL before the new release goes live, and the release fails instead of activating if the migration fails.

## Summary

- **Framework operation**: Framework
- **Workload**: Apply database schema changes
- **Release Status**: Published
- **Support Status**: Verified
- **Execution Status**: Ready

## 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

## Resource Requirements

- **Compute**: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
- **Postgres**: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.

## 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  --public --release-command "node migrate.cjs"`
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  --kind build`

## Success Checks

- Migration marker is readable via HTTP GET at the path `/migrated`, expecting `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.

## Cost Estimate

- **Monthly Amount**: $10.00
- **Currency**: USD  
- **Breakdown**:  
  - App server: s-1vcpu-1gb - $5.00  
  - Managed PostgreSQL database: s-1vcpu-1gb - $5.00

## Examples

- React Router release-command canary: `node migrate.cjs` runs before activation against the auto-provisioned managed database.
