128 lines
2.7 KiB
Markdown
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
|