Files
2025-11-30 08:24:43 +08:00

128 lines
2.7 KiB
Markdown

# Wrangler Setup for D1 and Drizzle
Complete guide to configuring Wrangler for D1 databases with Drizzle ORM.
---
## wrangler.jsonc Configuration
```jsonc
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2025-10-11",
// Node.js compatibility (recommended for Drizzle)
"compatibility_flags": ["nodejs_compat"],
// D1 database bindings
"d1_databases": [
{
// Binding name (used as env.DB in code)
"binding": "DB",
// Database name
"database_name": "my-database",
// Production database ID (from wrangler d1 create)
"database_id": "your-production-database-id",
// Local database ID (for development)
"preview_database_id": "local-db",
// Migrations directory (Drizzle generates here)
"migrations_dir": "./migrations"
}
]
}
```
---
## Environment Variables
Create `.env` file (never commit):
```bash
CLOUDFLARE_ACCOUNT_ID=your-account-id
CLOUDFLARE_DATABASE_ID=your-database-id
CLOUDFLARE_D1_TOKEN=your-api-token
```
---
## Wrangler Commands
```bash
# Create database
wrangler d1 create my-database
# List databases
wrangler d1 list
# Database info
wrangler d1 info my-database
# Apply migrations (local)
wrangler d1 migrations apply my-database --local
# Apply migrations (remote)
wrangler d1 migrations apply my-database --remote
# Execute SQL directly (local)
wrangler d1 execute my-database --local --command="SELECT * FROM users"
# Execute SQL directly (remote)
wrangler d1 execute my-database --remote --command="SELECT * FROM users"
```
---
## Local vs Remote
**Local Development** (`--local`):
- Uses SQLite file in `.wrangler/state/v3/d1/`
- Fast, no network latency
- Data persists between `wrangler dev` sessions
- Perfect for development and testing
**Remote/Production** (`--remote`):
- Uses actual D1 database in Cloudflare
- Subject to rate limits
- Production data
- Use for staging/production environments
**Always test locally first!**
---
## Migration Workflow
```bash
# 1. Make schema changes in src/db/schema.ts
# 2. Generate migration
npm run db:generate # or: drizzle-kit generate
# 3. Apply to local database
npm run db:migrate:local # or: wrangler d1 migrations apply DB --local
# 4. Test locally
npm run dev
# 5. Deploy code
npm run deploy
# 6. Apply to production database
npm run db:migrate:remote # or: wrangler d1 migrations apply DB --remote
```
---
## Important Notes
1. **migrations_dir**: Must point to where Drizzle generates migrations (usually `./migrations`)
2. **Binding name**: Must match in wrangler.jsonc, Env interface, and code
3. **Local first**: Always test migrations locally before remote
4. **Never commit**: Never commit database IDs or API tokens to version control