mirror of
https://github.com/pockethost/pockethost.git
synced 2025-05-31 19:26:40 +00:00
Dev mode
This commit is contained in:
parent
0cdd7520a9
commit
b9693780b9
@ -4,6 +4,7 @@
|
|||||||
import AdminSync from './AdminSync.svelte'
|
import AdminSync from './AdminSync.svelte'
|
||||||
import DangerZoneTitle from './DangerZoneTitle.svelte'
|
import DangerZoneTitle from './DangerZoneTitle.svelte'
|
||||||
import DeleteInstance from './DeleteInstance.svelte'
|
import DeleteInstance from './DeleteInstance.svelte'
|
||||||
|
import DevMode from './DevMode.svelte'
|
||||||
import Maintenance from './Maintenance.svelte'
|
import Maintenance from './Maintenance.svelte'
|
||||||
import RenameInstance from './RenameInstance.svelte'
|
import RenameInstance from './RenameInstance.svelte'
|
||||||
import VersionChange from './VersionChange/VersionChange.svelte'
|
import VersionChange from './VersionChange/VersionChange.svelte'
|
||||||
@ -29,5 +30,7 @@
|
|||||||
|
|
||||||
<AdminSync />
|
<AdminSync />
|
||||||
|
|
||||||
|
<DevMode />
|
||||||
|
|
||||||
<DeleteInstance />
|
<DeleteInstance />
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import Card from '$components/cards/Card.svelte'
|
||||||
|
import CardHeader from '$components/cards/CardHeader.svelte'
|
||||||
|
import { DOCS_URL } from '$src/env'
|
||||||
|
import { client } from '$src/pocketbase-client'
|
||||||
|
import { instance } from '../store'
|
||||||
|
import ErrorMessage from './ErrorMessage.svelte'
|
||||||
|
|
||||||
|
const { updateInstance } = client()
|
||||||
|
|
||||||
|
$: ({ id, dev } = $instance)
|
||||||
|
|
||||||
|
let errorMessage = ''
|
||||||
|
|
||||||
|
const handleChange = (e: Event) => {
|
||||||
|
const target = e.target as HTMLInputElement
|
||||||
|
const isChecked = target.checked
|
||||||
|
|
||||||
|
// Update the database with the new value
|
||||||
|
updateInstance({ id, fields: { dev: isChecked } })
|
||||||
|
.then(() => 'saved')
|
||||||
|
.catch((error) => {
|
||||||
|
errorMessage = error.data.message || error.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Card>
|
||||||
|
<CardHeader documentation={DOCS_URL(`/usage/dev-mode`)}>Dev Mode</CardHeader>
|
||||||
|
|
||||||
|
<p class="mb-8">
|
||||||
|
Starting with PocketBase v0.20.1, your instance will show debugging output
|
||||||
|
in the instance logs. Performance is degraded while Dev Mode is active.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ErrorMessage message={errorMessage} />
|
||||||
|
|
||||||
|
<label class="label cursor-pointer justify-center gap-4">
|
||||||
|
<span class="label-text">Dev Mode</span>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
class="toggle toggle-warning"
|
||||||
|
checked={!!dev}
|
||||||
|
on:change={handleChange}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
</Card>
|
9
frontends/lander/content/docs/usage/dev-mode.md
Normal file
9
frontends/lander/content/docs/usage/dev-mode.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Dev Mode
|
||||||
|
category: usage
|
||||||
|
description: Dev Mode shows PocketBase debugging output to the instance logs
|
||||||
|
---
|
||||||
|
|
||||||
|
Begining with PocketBase 0.20.1, you may supply a `--dev` flag to make PocketBase output debugging information to the console.
|
||||||
|
|
||||||
|
PocketHost supports this through the Dev Mode switch. When running in Dev Mode, your instance logs will show all debugging output.
|
@ -58,6 +58,7 @@ global.EventSource = EventSource
|
|||||||
name: MOTHERSHIP_NAME(),
|
name: MOTHERSHIP_NAME(),
|
||||||
slug: MOTHERSHIP_NAME(),
|
slug: MOTHERSHIP_NAME(),
|
||||||
port: MOTHERSHIP_PORT(),
|
port: MOTHERSHIP_PORT(),
|
||||||
|
dev: DEBUG(),
|
||||||
env: {
|
env: {
|
||||||
DATA_ROOT: mkContainerHomePath(`data`),
|
DATA_ROOT: mkContainerHomePath(`data`),
|
||||||
},
|
},
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
/// <reference path="../pb_data/types.d.ts" />
|
||||||
|
migrate((db) => {
|
||||||
|
const dao = new Dao(db)
|
||||||
|
const collection = dao.findCollectionByNameOrId("etae8tuiaxl6xfv")
|
||||||
|
|
||||||
|
// add
|
||||||
|
collection.schema.addField(new SchemaField({
|
||||||
|
"system": false,
|
||||||
|
"id": "a5qqq8fs",
|
||||||
|
"name": "dev",
|
||||||
|
"type": "bool",
|
||||||
|
"required": false,
|
||||||
|
"presentable": false,
|
||||||
|
"unique": false,
|
||||||
|
"options": {}
|
||||||
|
}))
|
||||||
|
|
||||||
|
return dao.saveCollection(collection)
|
||||||
|
}, (db) => {
|
||||||
|
const dao = new Dao(db)
|
||||||
|
const collection = dao.findCollectionByNameOrId("etae8tuiaxl6xfv")
|
||||||
|
|
||||||
|
// remove
|
||||||
|
collection.schema.removeField("a5qqq8fs")
|
||||||
|
|
||||||
|
return dao.saveCollection(collection)
|
||||||
|
})
|
@ -23,6 +23,7 @@ routerAdd(
|
|||||||
version: null,
|
version: null,
|
||||||
secrets: null,
|
secrets: null,
|
||||||
syncAdmin: null,
|
syncAdmin: null,
|
||||||
|
dev: null,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ routerAdd(
|
|||||||
|
|
||||||
const id = c.pathParam('id')
|
const id = c.pathParam('id')
|
||||||
const {
|
const {
|
||||||
fields: { subdomain, maintenance, version, secrets, syncAdmin },
|
fields: { subdomain, maintenance, version, secrets, syncAdmin, dev },
|
||||||
} = data
|
} = data
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
@ -46,6 +47,7 @@ routerAdd(
|
|||||||
version,
|
version,
|
||||||
secrets,
|
secrets,
|
||||||
syncAdmin,
|
syncAdmin,
|
||||||
|
dev,
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -78,6 +80,7 @@ routerAdd(
|
|||||||
maintenance,
|
maintenance,
|
||||||
secrets,
|
secrets,
|
||||||
syncAdmin,
|
syncAdmin,
|
||||||
|
dev,
|
||||||
})
|
})
|
||||||
|
|
||||||
const form = new RecordUpsertForm($app, record)
|
const form = new RecordUpsertForm($app, record)
|
||||||
|
@ -278,6 +278,7 @@ export const instanceService = mkSingleton(
|
|||||||
name: instance.subdomain,
|
name: instance.subdomain,
|
||||||
slug: instance.id,
|
slug: instance.id,
|
||||||
port: newPort,
|
port: newPort,
|
||||||
|
dev: instance.dev,
|
||||||
extraBinds: flatten([
|
extraBinds: flatten([
|
||||||
globSync(join(INSTANCE_APP_MIGRATIONS_DIR(), '*.js')).map(
|
globSync(join(INSTANCE_APP_MIGRATIONS_DIR(), '*.js')).map(
|
||||||
(file) =>
|
(file) =>
|
||||||
|
@ -16,6 +16,7 @@ import { map } from '@s-libs/micro-dash'
|
|||||||
import Docker, { Container, ContainerCreateOptions } from 'dockerode'
|
import Docker, { Container, ContainerCreateOptions } from 'dockerode'
|
||||||
import { existsSync } from 'fs'
|
import { existsSync } from 'fs'
|
||||||
import MemoryStream from 'memorystream'
|
import MemoryStream from 'memorystream'
|
||||||
|
import { gte } from 'semver'
|
||||||
import { AsyncReturnType } from 'type-fest'
|
import { AsyncReturnType } from 'type-fest'
|
||||||
import { PocketbaseReleaseVersionService } from '../PocketbaseReleaseVersionService'
|
import { PocketbaseReleaseVersionService } from '../PocketbaseReleaseVersionService'
|
||||||
import { buildImage } from './buildImage'
|
import { buildImage } from './buildImage'
|
||||||
@ -30,6 +31,7 @@ export type SpawnConfig = {
|
|||||||
env?: Env
|
env?: Env
|
||||||
stdout?: MemoryStream
|
stdout?: MemoryStream
|
||||||
stderr?: MemoryStream
|
stderr?: MemoryStream
|
||||||
|
dev?: boolean
|
||||||
}
|
}
|
||||||
export type PocketbaseServiceApi = AsyncReturnType<
|
export type PocketbaseServiceApi = AsyncReturnType<
|
||||||
typeof createPocketbaseService
|
typeof createPocketbaseService
|
||||||
@ -78,9 +80,11 @@ export const createPocketbaseService = async (
|
|||||||
env: {},
|
env: {},
|
||||||
stderr: new MemoryStream(),
|
stderr: new MemoryStream(),
|
||||||
stdout: new MemoryStream(),
|
stdout: new MemoryStream(),
|
||||||
|
dev: false,
|
||||||
...cfg,
|
...cfg,
|
||||||
}
|
}
|
||||||
const { version, name, slug, port, extraBinds, env, stderr, stdout } = _cfg
|
const { version, name, slug, port, extraBinds, env, stderr, stdout, dev } =
|
||||||
|
_cfg
|
||||||
logger.breadcrumb(name).breadcrumb(slug)
|
logger.breadcrumb(name).breadcrumb(slug)
|
||||||
const iLogger = InstanceLogger(slug, 'exec')
|
const iLogger = InstanceLogger(slug, 'exec')
|
||||||
|
|
||||||
@ -123,6 +127,9 @@ export const createPocketbaseService = async (
|
|||||||
const Cmd = (() => {
|
const Cmd = (() => {
|
||||||
return [`./pocketbase`, `serve`, `--http`, `0.0.0.0:8090`]
|
return [`./pocketbase`, `serve`, `--http`, `0.0.0.0:8090`]
|
||||||
})()
|
})()
|
||||||
|
if (dev && gte(realVersion.version, `0.20.1`)) {
|
||||||
|
Cmd.push(`--dev`)
|
||||||
|
}
|
||||||
|
|
||||||
const createOptions: ContainerCreateOptions = {
|
const createOptions: ContainerCreateOptions = {
|
||||||
Image: INSTANCE_IMAGE_NAME,
|
Image: INSTANCE_IMAGE_NAME,
|
||||||
|
@ -29,6 +29,7 @@ export type InstanceFields = BaseFields & {
|
|||||||
maintenance: boolean
|
maintenance: boolean
|
||||||
syncAdmin: boolean
|
syncAdmin: boolean
|
||||||
cname: string
|
cname: string
|
||||||
|
dev: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type WithUser = {
|
export type WithUser = {
|
||||||
|
@ -7,7 +7,7 @@ export type UpdateInstancePayload = {
|
|||||||
fields: Partial<
|
fields: Partial<
|
||||||
Pick<
|
Pick<
|
||||||
InstanceFields,
|
InstanceFields,
|
||||||
'maintenance' | 'secrets' | 'subdomain' | 'syncAdmin' | 'version'
|
'maintenance' | 'secrets' | 'subdomain' | 'syncAdmin' | 'version' | 'dev'
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
}
|
}
|
||||||
@ -44,6 +44,7 @@ export const UpdateInstancePayloadSchema: JSONSchemaType<UpdateInstancePayload>
|
|||||||
},
|
},
|
||||||
required: [],
|
required: [],
|
||||||
},
|
},
|
||||||
|
dev: { type: 'boolean', nullable: true },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user