← Cloudflare Durable Objects / durable-objects / reference
Migrace tříd Durable Object (zastaralé)
Migrace je proces mapování názvu třídy na stav za běhu. Tento proces sdělí změny běhovému prostředí Workers a poskytne mu instrukce, jak s těmito změnami naložit.
Chcete-li použít migraci, je potřeba:
- Upravte konfigurační soubor Wrangler (viz Konfigurace migrace Wrangler).
- Worker opětovně nasaďte pomocí
npx wrangler deploy.
Proces migrace musíte zahájit, pokud:
- Vytvořte nový Třída Durable Object.
- Přejmenování třídy Durable Object.
- Odstraňte třídu Durable Object.
- Přenos existující třídy Durable Objects.
Vytvoření migrace
Nejběžnější je migrace typu nová třída, která runtime informuje, že se nahrává nová třída Durable Objects. Tuto migraci potřebujete i při vytváření vaší první třídy Durable Object.
Chcete-li použít migraci Create:
-
Do konfiguračního souboru Wrangler přidejte následující řádky:
{ "migrations": [ { "tag": "<v1>", // Migration identifier. This should be unique for each migration entry "new_sqlite_classes": [ // Array of new classes "<NewDurableObjectClass>" ] } ] }[[migrations]] tag = "<v1>" new_sqlite_classes = [ "<NewDurableObjectClass>" ]Migrace Create obsahuje:
- A
tagpro identifikaci migrace. - Pole
new_sqlite_classes, který obsahuje novou třídu Durable Object.
- A
-
Ujistěte se, že v kódu Workeru odkazujete na správný název třídy Durable Object.
-
Nasaďte Worker.
Příklad vytvoření migrace
Chcete-li vytvořit nový binding Durable Object DURABLE_OBJECT_A, by měl váš konfigurační soubor Wrangler vypadat takto:
{
// Creating a new Durable Object class
"durable_objects": {
"bindings": [
{
"name": "DURABLE_OBJECT_A",
"class_name": "DurableObjectAClass"
}
]
},
// Add the lines below for a Create migration.
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": [
"DurableObjectAClass"
]
}
]
}[[durable_objects.bindings]]
name = "DURABLE_OBJECT_A"
class_name = "DurableObjectAClass"
[[migrations]]
tag = "v1"
new_sqlite_classes = [ "DurableObjectAClass" ]Vytvoření třídy Durable Object s úložištěm klíč-hodnota
Použijte new_classes u migrace v souboru Wrangler vašeho Workeru, čímž vytvoříte třídu Durable Object s úložištěm typu klíč-hodnota:
{
"migrations": [
{
"tag": "v1", // Should be unique for each entry
"new_classes": [
// Array of new classes
"MyDurableObject",
],
},
],
}[[migrations]]
tag = "v1"
new_classes = [ "MyDurableObject" ]Odstranění migrace
Spuštění migrace Delete odstraní všechny objekty Durable Objects přiřazené k odstraněné třídě, včetně veškerých uložených dat.
- Nespouštějte migraci pro odstranění třídy, aniž byste si nejprve ověřili, že se na Durable Objects v daném Workeru už nikde nespoléháte, tedy nejprve odstraňte binding z Workeru.
- Před odstraněním zkopírujte veškerá důležitá data na jiné místo.
- U třídy, která byla přejmenována nebo přenesena, není nutné spouštět migraci Delete.
Chcete-li použít migraci Delete:
-
Z konfiguračního souboru Wrangler odstraňte binding pro třídu, kterou chcete smazat.
-
Z kódu Workeru odstraňte odkazy na třídu, kterou chcete smazat.
-
Do konfiguračního souboru Wrangler přidejte následující řádky.
{ "migrations": [ { "tag": "<v2>", // Migration identifier. This should be unique for each migration entry "deleted_classes": [ // Array of deleted class names "<ClassToDelete>" ] } ] }[[migrations]] tag = "<v2>" deleted_classes = [ "<ClassToDelete>" ]Migrace Delete obsahuje:
- A
tagpro identifikaci migrace. - Pole
deleted_classes, který obsahuje odstraněné třídy Durable Object.
- A
-
Nasaďte Worker.
Příklad odstranění migrace
Chcete-li smazat binding Durable Object DEPRECATED_OBJECT, by měl váš konfigurační soubor Wrangler vypadat takto:
{
// Remove the binding for the DeprecatedObjectClass DO
// {"durable_objects": {"bindings": [
// {
// "name": "DEPRECATED_OBJECT",
// "class_name": "DeprecatedObjectClass"
// }
// ]}}
"migrations": [
{
"tag": "v3", // Should be unique for each entry
"deleted_classes": [ // Array of deleted classes
"DeprecatedObjectClass"
]
}
]
}[[migrations]]
tag = "v3"
deleted_classes = [ "DeprecatedObjectClass" ]Migrace přejmenování
Migrace přejmenování slouží k přesunu uložených Durable Objects mezi dvěma třídami Durable Object v rámci stejného souboru s kódem Workeru.
Chcete-li použít migraci Rename:
-
Předchozí název třídy nahraďte novým názvem úpravou konfiguračního souboru Wrangler následujícím způsobem:
{ "durable_objects": { "bindings": [ { "name": "<MY_DURABLE_OBJECT>", "class_name": "<UpdatedDurableObject>" // Update the class name to the new class name } ] }, "migrations": [ { "tag": "<v3>", // Migration identifier. This should be unique for each migration entry "renamed_classes": [ // Array of rename directives { "from": "<OldDurableObject>", "to": "<UpdatedDurableObject>" } ] } ] }[[durable_objects.bindings]] name = "<MY_DURABLE_OBJECT>" class_name = "<UpdatedDurableObject>" [[migrations]] tag = "<v3>" [[migrations.renamed_classes]] from = "<OldDurableObject>" to = "<UpdatedDurableObject>"Migrace Rename obsahuje:
- A
tagpro identifikaci migrace. -
renamed_classespole, které obsahuje objekty sfromatovlastnosti. fromvlastnost udává původní název třídy Durable Object.tovlastnost udává nový název třídy Durable Object.
- A
-
V kódu Workeru uveďte odkaz na nový název třídy Durable Object.
-
Nasaďte Worker.
Příklad migrace přejmenování
Chcete-li přejmenovat třídu Durable Object, z OldName na UpdatedName, by měl váš konfigurační soubor Wrangler vypadat takto:
{
"durable_objects": {
"bindings": [
{
"name": "MY_DURABLE_OBJECT",
// Update the binding to the new class name.
"class_name": "UpdatedName"
}
]
},
// Renaming classes
"migrations": [
{
"tag": "v3",
"renamed_classes": [ // Array of rename directives
{
"from": "OldName",
"to": "UpdatedName"
}
]
}
]
}[[durable_objects.bindings]]
name = "MY_DURABLE_OBJECT"
class_name = "UpdatedName"
[[migrations]]
tag = "v3"
[[migrations.renamed_classes]]
from = "OldName"
to = "UpdatedName"Migrace Transfer
Migrace Transfer slouží k přenosu uložených Durable Objects mezi dvěma třídami Durable Object v různých souborech kódu Workeru.
Pokud chcete přenést uložené Durable Objects mezi dvěma třídami Durable Object ve stejném souboru kódu Worker, použijte Migrace přejmenování místo toho.
Chcete-li použít migraci Transfer:
-
Konfigurační soubor Wrangler upravte následujícím způsobem:
{ "durable_objects": { "bindings": [ { "name": "<MY_DURABLE_OBJECT>", "class_name": "<DestinationDurableObjectClass>" } ] }, "migrations": [ { "tag": "<v4>", // Migration identifier. This should be unique for each migration entry "transferred_classes": [ { "from": "<SourceDurableObjectClass>", "from_script": "<SourceWorkerScript>", "to": "<DestinationDurableObjectClass>" } ] } ] }[[durable_objects.bindings]] name = "<MY_DURABLE_OBJECT>" class_name = "<DestinationDurableObjectClass>" [[migrations]] tag = "<v4>" [[migrations.transferred_classes]] from = "<SourceDurableObjectClass>" from_script = "<SourceWorkerScript>" to = "<DestinationDurableObjectClass>"Migrace Transfer obsahuje:
- A
tagpro identifikaci migrace. -
transferred_classespole, které obsahuje objekty sfrom,from_script, atovlastnosti.fromvlastnost udává název zdrojové třídy Durable Object.from_scriptvlastnost udává název zdrojového skriptu Workeru.tovlastnost udává název cílové třídy Durable Object.
- A
-
Ujistěte se, že v kódu Workeru odkazujete na název nové, cílové třídy Durable Object.
-
Nasaďte Worker.
Příklad migrace Transfer
Uložené Durable Objects můžete přenést z DurableObjectExample na TransferredClass ze skriptu Workeru nazvaného OldWorkerScript. Obsah konfiguračního souboru Wrangler pro váš nový kód Workeru (cílový kód Workeru) by vypadal takto:
{
// destination worker
"durable_objects": {
"bindings": [
{
"name": "MY_DURABLE_OBJECT",
"class_name": "TransferredClass"
}
]
},
// Transferring class
"migrations": [
{
"tag": "v4",
"transferred_classes": [
{
"from": "DurableObjectExample",
"from_script": "OldWorkerScript",
"to": "TransferredClass"
}
]
}
]
}[[durable_objects.bindings]]
name = "MY_DURABLE_OBJECT"
class_name = "TransferredClass"
[[migrations]]
tag = "v4"
[[migrations.transferred_classes]]
from = "DurableObjectExample"
from_script = "OldWorkerScript"
to = "TransferredClass"Konfigurace migrace Wrangler
-
Migrace se provádějí prostřednictvím
[[migrations]]klíč configurations ve vašemwrangler.tomlsoubor nebomigrationsklíč ve vašemwrangler.jsonc. -
Migrace vyžadují migrační značku, která se definuje pomocí
tagvlastnost v každé položce migrace. -
Migrační značky fungují jako jedinečné názvy a určují, které migrace už byly použity. Jakmile má daný kód Workeru migrační značku nastavenou, musí ji obsahovat i všechna jeho budoucí nasazení.
-
Seznam migrací je seřazené pole tabulek, které se zadává jako klíč v konfiguračním souboru Wrangler.
-
Migraci můžete definovat pro každé prostředí i na nejvyšší úrovni.
- Migrace na nejvyšší úrovni se zadává na nejvyšší úrovni
migrationsklíč v konfiguračním souboru Wrangleru. - Migrace na úrovni prostředí se zadává pomocí
migrationsklíč uvnitřenvklíč konfiguračního souboru Wrangleru ([env.<environment_name>.migrations]).- Příklad souboru Wrangler:
wrangler.jsonc{ // top-level default migrations "migrations": [ { "tag": "v1", "new_sqlite_classes": ["MyDurableObject"] }, ], "env": { "staging": { // migration override for staging "migrations": [ { "tag": "v1-staging", "new_sqlite_classes": ["MyDurableObject"] }, ], }, }, } - Pokud je migrace zadána pouze na nejvyšší úrovni, a ne na úrovni prostředí, prostředí migraci z nejvyšší úrovně zdědí.
- Migrace na úrovni prostředí mají přednost před migracemi na nejvyšší úrovni.
- Migrace na nejvyšší úrovni se zadává na nejvyšší úrovni
-
Všechny migrace se použijí při nasazení. Každou migraci lze použít jen jednou na prostředí.
-
Každá migrace v seznamu může obsahovat více direktiv a s tím, jak projekt roste na složitosti, lze zadat i více migrací.
Úložiště typu SQLite nelze povolit u existující, již nasazené třídy Durable Object, proto nastavení new_sqlite_classes u pozdějších migrací selže s chybou. Automatická migrace nasazených tříd z úložiště typu klíč-hodnota na úložiště SQLite bude k dispozici později.