Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions docs/content/docs/2.database/1.index.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ You can find your Neon connection string in the [Neon dashboard](https://console

### Docker/Kubernetes Deployments

Build container images without database credentials by deferring environment resolution to runtime. Set the driver explicitly and disable build-time migrations:
Build container images without database credentials by deferring environment resolution to runtime. Set the driver explicitly and disable automatic migrations during build and dev:

::tabs{sync="database-dialect"}
:::tabs-item{label="SQLite" icon="i-simple-icons-sqlite"}
Expand All @@ -338,7 +338,8 @@ Build container images without database credentials by deferring environment res
db: {
dialect: 'sqlite',
driver: 'libsql',
applyMigrationsDuringBuild: false
applyMigrationsDuringBuild: false,
applyMigrationsDuringDev: false
}
}
})
Expand All @@ -351,7 +352,8 @@ Build container images without database credentials by deferring environment res
db: {
dialect: 'postgresql',
driver: 'postgres-js', // or 'neon-http'
applyMigrationsDuringBuild: false
applyMigrationsDuringBuild: false,
applyMigrationsDuringDev: false
}
}
})
Expand All @@ -364,7 +366,8 @@ Build container images without database credentials by deferring environment res
db: {
dialect: 'mysql',
driver: 'mysql2',
applyMigrationsDuringBuild: false
applyMigrationsDuringBuild: false,
applyMigrationsDuringDev: false
}
}
})
Expand Down
5 changes: 3 additions & 2 deletions docs/content/docs/2.database/4.migrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,14 @@ For Cloudflare D1, migrations cannot run during build since there is no database
::

::note
To disable automatic migrations during `nuxt build`, you can set the `applyMigrationsDuringBuild` option to `false`:
To disable automatic migrations during `nuxt build`, you can set the `applyMigrationsDuringBuild` option to `false`. To disable automatic migrations during `nuxt dev`, set `applyMigrationsDuringDev` to `false` (useful when running dev with production env vars):

```ts [nuxt.config.ts]
export default defineNuxtConfig({
hub: {
db: {
applyMigrationsDuringBuild: false
applyMigrationsDuringBuild: false,
applyMigrationsDuringDev: false
}
}
})
Expand Down
1 change: 1 addition & 0 deletions src/db/runtime/plugins/migrations.dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export default defineNitroPlugin(async () => {

const hub = useRuntimeConfig().hub as ResolvedHubConfig
if (!hub.db) return
if (!hub.db.applyMigrationsDuringDev) return

let db
try {
Expand Down
3 changes: 2 additions & 1 deletion src/db/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ export async function resolveDatabaseConfig(nuxt: Nuxt, hub: HubConfig): Promise
config = defu(config, {
migrationsDirs: getLayerDirectories(nuxt).map(layer => join(layer.server, 'db/migrations')),
queriesPaths: [],
applyMigrationsDuringBuild: true
applyMigrationsDuringBuild: true,
applyMigrationsDuringDev: true
})

switch (config.dialect) {
Expand Down
7 changes: 7 additions & 0 deletions src/types/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,12 @@ export type DatabaseConfig = {
* @default true
*/
applyMigrationsDuringBuild?: boolean
/**
* Set `false` to disable applying database migrations during development (`nuxt dev`).
*
* @default true
*/
applyMigrationsDuringDev?: boolean
/**
* MySQL mode for Drizzle ORM relational queries.
* Only applicable when dialect is 'mysql'.
Expand Down Expand Up @@ -227,6 +233,7 @@ export type ResolvedDatabaseConfig = DatabaseConfig & {
migrationsDirs: string[]
queriesPaths: string[]
applyMigrationsDuringBuild: boolean
applyMigrationsDuringDev: boolean
casing?: 'snake_case' | 'camelCase'
replicas?: string[]
}
19 changes: 18 additions & 1 deletion test/database.config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ describe('resolveDatabaseConfig', () => {
connection: {
url: 'file:/tmp/test-hub/db/sqlite.db'
},
applyMigrationsDuringBuild: true
applyMigrationsDuringBuild: true,
applyMigrationsDuringDev: true
})
expect(result).not.toBe(false)
if (result !== false) {
Expand Down Expand Up @@ -471,6 +472,21 @@ describe('resolveDatabaseConfig', () => {
}
})

it('should respect custom applyMigrationsDuringDev', async () => {
const nuxt = createMockNuxt()
const hub = createBaseHubConfig({
dialect: 'sqlite',
applyMigrationsDuringDev: false
})

const result = await resolveDatabaseConfig(nuxt, hub)

expect(result).not.toBe(false)
if (result !== false) {
expect(result.applyMigrationsDuringDev).toBe(false)
}
})

it('should handle multiple layers for migrationsDirs', async () => {
const nuxt = createMockNuxt([
{ config: { srcDir: '/app', rootDir: '/app', serverDir: '/app/server' } },
Expand Down Expand Up @@ -687,6 +703,7 @@ describe('resolveDatabaseConfig', () => {
expect(result).not.toBe(false)
if (result !== false) {
expect(result.applyMigrationsDuringBuild).toBe(false)
expect(result.applyMigrationsDuringDev).toBe(true)
}
})
})
Expand Down
Loading