INTEGRITY Документация

Миграции классов Durable Object (устаревший способ)

Миграция представляет собой процесс сопоставления имени класса с состоянием среды выполнения. Этот процесс передаёт изменения в среду выполнения Workers и предоставляет ей инструкции о том, как обрабатывать эти изменения.

Чтобы применить миграцию, нужно:

  1. Отредактируйте файл конфигурации Wrangler (см. конфигурация Wrangler для миграций).
  2. Повторно разверните Worker с помощью npx wrangler deploy.

Вам необходимо запустить процесс миграции в следующих случаях:

Создание миграции

Наиболее распространённой является миграция нового класса, которая сообщает среде выполнения, что загружается новый класс Durable Object. Она же требуется при создании вашего первого класса Durable Object.

Чтобы применить миграцию создания:

  1. Добавьте следующие строки в файл конфигурации Wrangler:

    {
      "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>" ]

    Миграция Create содержит:

    • A tag для идентификации миграции.
    • Массив new_sqlite_classes, который содержит новый класс Durable Object.
  2. Убедитесь, что в коде вашего Worker указано правильное имя класса Durable Object.

  3. Разверните Worker.

Пример создания миграции

Чтобы создать новую привязку Durable Object DURABLE_OBJECT_A, ваш конфигурационный файл Wrangler должен выглядеть следующим образом:

{
	// 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" ]

Создание класса Durable Object с хранилищем типа «ключ-значение»

Используйте new_classes в миграции в файле Wrangler вашего Worker, чтобы создать класс Durable Object с бэкендом хранилища ключ-значение:

{
	"migrations": [
		{
			"tag": "v1", // Should be unique for each entry
			"new_classes": [
				// Array of new classes
				"MyDurableObject",
			],
		},
	],
}
[[migrations]]
tag = "v1"
new_classes = [ "MyDurableObject" ]

Удаление миграции

Выполнение миграции Delete приведёт к удалению всех Durable Objects, связанных с удаляемым классом, включая все их сохранённые данные.

Чтобы применить миграцию удаления:

  1. Удалите из конфигурационного файла Wrangler привязку класса, который требуется удалить.

  2. Удалите из кода Worker все ссылки на класс, который требуется удалить.

  3. Добавьте следующие строки в файл конфигурации Wrangler.

    {
      "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>" ]

    Миграция Delete содержит:

    • A tag для идентификации миграции.
    • Массив deleted_classes, который содержит удалённые классы Durable Object.
  4. Разверните Worker.

Пример удаления миграции

Чтобы удалить привязку Durable Object DEPRECATED_OBJECT, ваш конфигурационный файл Wrangler должен выглядеть следующим образом:

{
	// 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" ]

Миграция переименования

Миграции переименования используются для переноса сохранённых Durable Objects между двумя классами Durable Object в одном файле кода Worker.

Чтобы применить миграцию переименования:

  1. Замените предыдущее имя класса на новое, отредактировав конфигурационный файл Wrangler следующим образом:

    {
      "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>"

    Миграция Rename содержит:

    • A tag для идентификации миграции.
    • renamed_classes массив, который содержит объекты с from и to свойства.
    • from свойство содержит прежнее имя класса Durable Object.
    • to свойство содержит новое имя класса Durable Object после переименования.
  2. Укажите имя нового класса Durable Object в коде Worker.

  3. Разверните Worker.

Пример миграции переименования

Чтобы переименовать класс Durable Object, из OldName к UpdatedName, ваш конфигурационный файл Wrangler должен выглядеть следующим образом:

{
	"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"

Миграция переноса

Миграции переноса используются для переноса сохранённых Durable Objects между двумя классами Durable Object, находящимися в разных файлах кода Worker.

Если вы хотите перенести сохранённые Durable Objects между двумя классами Durable Object в одном файле кода Worker, используйте Миграции переименования взамен.

Чтобы применить миграцию переноса:

  1. Отредактируйте файл конфигурации Wrangler следующим образом:

    {
      "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>"

    Миграция Transfer содержит:

    • A tag для идентификации миграции.
    • transferred_classes массив, который содержит объекты с from, from_script, а также to свойства.
      • from свойство содержит имя исходного класса Durable Object.
      • from_script свойство содержит имя исходного скрипта Worker.
      • to свойство содержит имя класса Durable Object назначения.
  2. Убедитесь, что в коде вашего Worker указано имя нового целевого класса Durable Object.

  3. Разверните Worker.

Пример миграции переноса

Вы можете перенести сохранённые Durable Objects из DurableObjectExample к TransferredClass из скрипта Worker с именем OldWorkerScript. Конфигурация файла Wrangler для нового кода Worker (кода Worker назначения) будет выглядеть так:

{
	// 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"

конфигурация Wrangler для миграций

Нельзя включить хранилище на основе SQLite для уже развёрнутого класса Durable Object, поэтому указание new_sqlite_classes в последующих миграциях завершится ошибкой. Автоматическая миграция развёрнутых классов с бэкенда хранилища ключ-значение на бэкенд хранилища SQLite станет доступна в будущем.