← Sandbox SDK / sandbox / 1-0-preview / api
Chyby
Třídy a kódy chyb vracené verzí Sandbox SDK 1.0 preview, se stručnými doporučenými kroky. Úplné postupy obnovy najdete v Chyby a zotavení.
Jak se vracejí chyby
Operace vyvolávají výjimky, které můžete zachytit. Upřednostněte instanceof u tříd z @cloudflare/sandbox. Použijte code a context pro metriky a stabilní přístup k polím.
import {
ContainerUnavailableError,
OperationInterruptedError,
RPCTransportError,
} from "@cloudflare/sandbox";
try {
await sandbox.exec(["npm", "test"], { cwd: "/workspace/app" });
} catch (error) {
if (error instanceof ContainerUnavailableError) {
// error.code === "CONTAINER_UNAVAILABLE"
// error.context.reason, error.context.retryAfterMs
}
if (error instanceof OperationInterruptedError) {
// Convenience getters: error.reason, error.retryable, error.operationName
// admitted is only on context: error.context.admitted
}
if (error instanceof RPCTransportError) {
// Convenience getters: error.kind, error.originalMessage
}
}import {
ContainerUnavailableError,
OperationInterruptedError,
RPCTransportError,
} from "@cloudflare/sandbox";
try {
await sandbox.exec(["npm", "test"], { cwd: "/workspace/app" });
} catch (error) {
if (error instanceof ContainerUnavailableError) {
// error.code === "CONTAINER_UNAVAILABLE"
// error.context.reason, error.context.retryAfterMs
}
if (error instanceof OperationInterruptedError) {
// Convenience getters: error.reason, error.retryable, error.operationName
// admitted is only on context: error.context.admitted
}
if (error instanceof RPCTransportError) {
// Convenience getters: error.kind, error.originalMessage
}
}Importy
Běžné chyby životního cyklu, procesů, terminálu a zálohování jsou dostupné přímo z kořene balíčku:
import {
ContainerUnavailableError,
OperationInterruptedError,
RPCTransportError,
StaleProcessHandleError,
// ...
} from "@cloudflare/sandbox";import {
ContainerUnavailableError,
OperationInterruptedError,
RPCTransportError,
StaleProcessHandleError,
// ...
} from "@cloudflare/sandbox";Celý modul také exportuje ErrorCode, SandboxError, createErrorFromResponse, a další doménové chyby (soubory, porty, interpret, připojené svazky a související typy kontextu):
import {
ErrorCode,
SandboxError,
createErrorFromResponse,
FileNotFoundError,
// ...
} from "@cloudflare/sandbox/errors";import {
ErrorCode,
SandboxError,
createErrorFromResponse,
FileNotFoundError,
// ...
} from "@cloudflare/sandbox/errors";Pomocné funkce platformy (ne SandboxError podtřídy):
import {
isPlatformTransientError,
isDurableObjectCodeUpdateReset,
} from "@cloudflare/sandbox";import {
isPlatformTransientError,
isDurableObjectCodeUpdateReset,
} from "@cloudflare/sandbox";SandboxError tvar
Většina chyb SDK dědí z SandboxError:
| Člen | Popis |
|---|---|
name |
Název třídy (například ContainerUnavailableError) |
message |
Zpráva čitelná pro člověka |
code |
Stabilní ErrorCode řetězec (například CONTAINER_UNAVAILABLE) |
context |
Strukturovaná pole pro typ chyby |
httpStatus |
Namapovaný HTTP stav, pokud je k dispozici |
operation |
Popisek operace, je-li uveden |
suggestion |
Volitelný praktický návrh |
timestamp |
Časové razítko ISO, pokud je uvedeno |
toJSON() |
Serializuje pole chyby pro logy |
RuntimeIdentityInactiveError rozšiřuje Error přímo (nikoli SandboxError). Znamená to, že aktuální kontejner už pro tento handle nebo volání není aktivní.
Tabulky obsahují Doporučená oprava sloupec. Podrobnější postupy obnovy najdete v Chyby a zotavení.
Chyby dostupnosti a chyby neshody nasazení jsou uvedeny v samostatných sekcích. Pro oba případy nepoužívejte stejnou smyčku opakování.
Dostupnost kontejneru a přerušená volání
Tyto chyby vznikají při běžném startu, zastavení kvůli nečinnosti, nahrazení nebo ztrátě spojení během probíhajícího volání.
| Třída | Kód | Klíčový kontext | Podrobnosti | Doporučená oprava |
|---|---|---|---|---|
ContainerUnavailableError |
CONTAINER_UNAVAILABLE |
reason, retryable: true, retryAfterMs? |
Kontejner nebyl připraven před zahájením operace. | Počkejte s opakováním (dodržte retryAfterMs je-li nastavena), a poté zkuste stejný typ práce znovu. |
OperationInterruptedError |
OPERATION_INTERRUPTED |
reason, operation, admitted, retryable |
Kontejner nebo sandbox se změnil poté, co operace pravděpodobně už začala. | Přečtěte si reason a retryable. Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace. |
RPCTransportError |
RPC_TRANSPORT_ERROR |
kind, originalMessage, errorName, closeCode? |
SDK ztratilo spojení s kontejnerem během volání. | Pozdější volání může fungovat. Toto volání již mohlo něco změnit. |
RuntimeIdentityInactiveError |
, | , | Aktuální kontejner již není aktivní pro toto volání nebo handle. Prostý Error, nikoli SandboxError. |
Zkontrolujte, zda prostředek stále existuje; pokud ne, spusťte práci znovu z uloženého stavu. |
ContainerUnavailableError důvodů
context.reason:
| Důvod | Význam |
|---|---|
container_starting |
Kontejner se stále spouští |
container_unhealthy |
Kontejner není zdravý |
container_replaced |
Kontejner byl nahrazen |
rpc_upgrade_failed |
Nepodařilo se navázat komunikaci s kontejnerem |
OperationInterruptedError důvodů
reason / context.reason:
| Důvod | Význam |
|---|---|
runtime_replaced |
Podkladová instance kontejneru byla nahrazena |
container_stopped |
Kontejner zastaven |
transport_disposed |
Komunikační relace byla zrušena |
sandbox_destroyed |
Sandbox byl zničen |
sandbox_lifetime_changed |
Konfigurace životnosti sandboxu se změnila |
recovery_exhausted |
Pokusy o obnovení byly vyčerpány |
unknown |
Neklasifikované přerušení |
Pohodlné gettery na chybě: reason, retryable, a operationName. Další pole, například admitted, operationId, phase, a metadata související se zálohováním se nacházejí na error.context pouze (admitted je true | "unknown").
RPCTransportError typy
kind / context.kind:
| Typ | Význam |
|---|---|
peer_closed |
Protistrana ukončila spojení |
connection_failed |
Připojení se nezdařilo |
upgrade_failed |
Navázání připojení se nezdařilo |
invalid_frame |
Neočekávaný rámec |
protocol_error |
Rámec odmítnutý protokolem |
session_disposed |
Relace byla uvolněna |
unknown |
Neklasifikované selhání |
Neshoda mezi Workerem a image kontejneru
Tato selhání obvykle znamenají, že si balíček Workeru a image kontejneru neodpovídají, že se image nepodařilo spustit, nebo že metadata nastavení neodpovídají tomu, co očekává SDK. Opravte nasazení. Neberte je jako pomalý start kontejneru.
Nasaďte balíček Workeru a image kontejneru sandboxu ze stejné @cloudflare/sandbox@next řádek. Preview Worker se stabilním obrazem (nebo naopak) zde často selže.
| Třída | Kód | Klíčový kontext | Podrobnosti | Doporučená oprava |
|---|---|---|---|---|
RuntimeControlProtocolError |
INTERNAL_ERROR |
reason |
Mezi Workerem a kontejnerem se nepodařilo dokončit nastavení (neshoda metadat nebo protokolu). Kód je sdílený INTERNAL_ERROR hodnotu, tuto třídu identifikujte pomocí instanceof RuntimeControlProtocolError nebo spárováním code === "INTERNAL_ERROR" hodnotou context.reason. |
Nasaďte balíček Workeru a image kontejneru ze stejné vydávací větve. V případě potřeby opravte konfiguraci. |
RuntimeControlProtocolError důvodů
context.reason:
| Důvod | Význam | Poznámky |
|---|---|---|
unsupported-protocol-version |
Verze protokolu Workeru a kontejneru si neodpovídají | Balíček Workeru a image kontejneru nejsou ze stejného vydání |
missing-metadata |
V kontejneru chybí povinná metadata pro nastavení | Vadný nebo neúplný obraz/sestavení |
malformed-metadata |
Metadata nastavení se nepodařilo zpracovat | Vadný nebo neúplný obraz/sestavení |
activation-mismatch |
Aktivace neodpovídala očekávanému kontejneru | Může se objevit po výměně kontejneru; pokud se to opakuje, zkontrolujte spárování Worker a obrazu kontejneru |
Následující trvalé problémy spolu souvisejí a vracejí stejnou odpověď:
| Problém | Doporučená oprava |
|---|---|
Chybný nebo chybějící obraz kontejneru v wrangler / registry |
Nasaďte balíček Workeru a image kontejneru ze stejné vydávací větve. V případě potřeby opravte konfiguraci. |
| Kontejner skončí dříve, než je připraven | Opravte image nebo entrypoint a znovu nasaďte aplikaci. Nespoléhejte jen na opakování volání aplikace. |
| Limity kapacity účtu nebo lokality | Viz Limity kapacity v produkci |
Proces
| Třída | Kód | Klíčový kontext | Podrobnosti | Doporučená oprava |
|---|---|---|---|---|
ProcessNotFoundError |
PROCESS_NOT_FOUND |
processId |
Neznámé ID procesu v aktuálním kontejneru. | Použijte správné ID, nebo proces spusťte znovu z uloženého stavu. |
StaleProcessHandleError |
STALE_PROCESS_HANDLE |
processId, pid, operation |
Handle nebo ID z předchozího kontejneru. | Práci spusťte znovu z uloženého stavu. Starý úchyt znovu nepoužívejte. |
ProcessSpawnFailedError |
PROCESS_SPAWN_FAILED |
processId, command, cwd?, stderr? |
Proces se nepodařilo spustit. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
InvalidProcessCwdError |
INVALID_PROCESS_CWD |
cwd, reason |
Neplatný pracovní adresář. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
InvalidProcessEnvironmentError |
INVALID_PROCESS_ENVIRONMENT |
name?, reason |
Neplatná překryvná vrstva prostředí. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
InvalidProcessCursorError |
INVALID_PROCESS_CURSOR |
processId, cursor?, reason |
Neplatný kurzor logu. | Opravte kurzor nebo ostatní argumenty. Stejnou neplatnou hodnotu neopakujte. |
ProcessWaitTimeoutError |
PROCESS_WAIT_TIMEOUT |
processId, operation, timeout |
Lokální output, waitForExit, nebo waitForLog vypršel časový limit. |
Čekání skončilo. Proces nebo terminál přitom může stále běžet. |
ProcessAbortedError |
PROCESS_ABORTED |
processId, operation |
Lokální AbortSignal ukončil čekání nebo stream. |
Čekání skončilo. Proces nebo terminál přitom může stále běžet. |
ProcessReadyTimeoutError |
PROCESS_READY_TIMEOUT |
processId, command, condition, timeout |
Čekání na připravenost vypršelo. | Než spustíte další proces, zkontrolujte, zda ten předchozí stále běží. |
ProcessExitedBeforeReadyError |
PROCESS_EXITED_BEFORE_READY |
processId, command, condition, exitCode |
Proces skončil dříve, než byl připravený. | Opravte příkaz nebo prostředí a v případě potřeby akci spusťte znovu. |
ProcessExitedBeforeLogError |
PROCESS_EXITED_BEFORE_LOG |
processId, pid, exit |
Proces skončil dříve, než došlo ke shodě v protokolu. | Opravte příkaz nebo prostředí a v případě potřeby akci spusťte znovu. |
ProcessError |
PROCESS_ERROR |
processId, pid?, exitCode?, stderr? |
Obecné selhání procesu. | Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace. |
getProcess a listProcesses a vrátí null nebo [] není chyba.
Terminál
| Třída | Kód | Klíčový kontext | Podrobnosti | Doporučená oprava |
|---|---|---|---|---|
TerminalNotFoundError |
TERMINAL_NOT_FOUND |
terminalId |
Neznámé ID terminálu v aktuálním kontejneru. | Použijte správné ID, nebo terminál spusťte znovu z uloženého stavu. |
StaleTerminalHandleError |
STALE_TERMINAL_HANDLE |
terminalId, operation |
Handle nebo ID z předchozího kontejneru. | Práci spusťte znovu z uloženého stavu. Starý úchyt znovu nepoužívejte. |
InvalidTerminalCwdError |
INVALID_TERMINAL_CWD |
terminalId, cwd, reason |
Neplatný pracovní adresář při vytvoření. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
InvalidTerminalCursorError |
INVALID_TERMINAL_CURSOR |
terminalId, cursor?, reason |
Neplatný kurzor výstupu. | Opravte kurzor nebo ostatní argumenty. Stejnou neplatnou hodnotu neopakujte. |
TerminalControlError |
TERMINAL_CONTROL_ERROR |
terminalId, operation, reason? |
Nezdařilo se přerušení, ukončení, změna velikosti nebo související řídicí operace. | Před opakováním operace, která mění stav, zkontrolujte stav sandboxu nebo aplikace. |
getTerminal a listTerminals a vrátí null nebo [] není chyba.
Záloha
| Třída | Kód | Podrobnosti | Doporučená oprava |
|---|---|---|---|
BackupCreateError |
BACKUP_CREATE_FAILED |
Vytvoření zálohy selhalo. | Zkontrolujte podrobnosti chyby; pokud jsou možnosti neplatné, opravte je. |
BackupRestoreError |
BACKUP_RESTORE_FAILED |
Obnova ze zálohy selhala. | Zkontrolujte podrobnosti chyby; pokud jsou možnosti neplatné, opravte je. |
BackupNotFoundError |
BACKUP_NOT_FOUND |
Neznámé ID zálohy. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
BackupExpiredError |
BACKUP_EXPIRED |
Platnost zálohy vypršela. | Opravte možnosti, nebo vytvořte novou zálohu. |
InvalidBackupConfigError |
INVALID_BACKUP_CONFIG |
Neplatné možnosti zálohy. | Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
Ostatní domény
Tyto třídy jsou dostupné z @cloudflare/sandbox/errors (a některé pomocné nástroje pro připojení z kořenového adresáře balíčku). Podrobnosti si ověřte podle svého nainstalovaného balíčku. Ne všechny specifické návody pro jednotlivé domény jsou již zveřejněny.
| Doména | Příklady | Doporučená oprava |
|---|---|---|
| Souborový systém | FileNotFoundError, FileExistsError, PermissionDeniedError, FileTooLargeError, FileSystemError |
Opravte cestu nebo ošetřete chybějící soubor. |
| Porty / náhled | PortAlreadyExposedError, PortNotExposedError, InvalidPortError, PortInUseError, ServiceNotRespondingError, CustomDomainRequiredError |
Opravte možnosti portu nebo nastavení expose. |
| Interpreter (rozšíření) | InterpreterNotReadyError, ContextNotFoundError, CodeExecutionError |
Pokud interpret ještě není připravený, počkejte a zkuste to znovu. V opačném případě opravte požadavek. |
| Připojení | BucketMountError, BucketUnmountError, S3FSMountError, MissingCredentialsError, InvalidMountConfigError |
Opravte možnosti připojení nebo přihlašovací údaje. |
| Validace | ValidationFailedError |
Opravte cestu, prostředí, příkaz nebo ostatní argumenty. Stejný neplatný požadavek neopakujte. |
Další třídy domén mohou existovat na @cloudflare/sandbox/errors v nainstalovaném balíčku. Než se spolehnete na nezdokumentované rozhraní, ověřte si ho v tomto balíčku.
Chyby související s připojením jsou také exportovány z @cloudflare/sandbox vedle API pro připojení.
Pomocné funkce platformy
| Pomocník | Podrobnosti | Doporučená oprava |
|---|---|---|
isPlatformTransientError(error) |
Platí pro některé přechodné signály platformy (například ztrátu připojení, určitá obnovení úložiště Durable Object při startu nebo chyby platformy, které lze opakovat). | Upřednostněte nový požadavek nebo operaci. |
isDurableObjectCodeUpdateReset(error) |
Platí, pokud byl izolát Durable Object nahrazen aktualizací kódu nebo nasazením. | Nezkoušejte to opakovaně v rámci téhož požadavku. Nechte nový požadavek proběhnout na novém izolátu. |
Tyto pomocné funkce doplňují SandboxError podtřídy. Nenahrazují pravidla obnovy platná pro Chyby a zotavení.
Limity kapacity v produkci
V produkčním prostředí může platforma Containers odmítnout úlohu, pokud jsou překročeny limity účtu nebo nasazení (například SURPASSED_BASE_LIMITS, SURPASSED_TOTAL_LIMITS, LOCATION_SURPASSED_BASE_LIMITS). Opakování stejného přetížení problém nevyřeší. Snižte souběžnost, zvyšte limity nebo přepněte na operátorský postup. Tyto limity se obvykle neprojeví v lokálním wrangler dev.
Viz Limity platformy.