Вопрос или проблема
У меня есть воркер Cloudflare, реализованный на JavaScript, и я хочу получить номер версии (тот же, что отображается в интерфейсе Cloudflare). Мне нужен этот код для генерации cacheKey, который меняется после обновления программного обеспечения. В противном случае у меня регулярно происходят сбои из-за несовместимых данных кэша.
wrangler deploy cloudflarewrapper.js
⛅️ wrangler 3.0.1 (доступно обновление 3.78.11)
-------------------------------------------------------
Общий размер загрузки: 1873.17 KiB / gzip: 278.74 KiB
Загружен myscript (4.90 сек)
Опубликован myscript (1.40 сек)
https://myscript.xx.workers.dev
Текущий ID развертывания: 506d732c-7cda-11ef-ba53-136088c204d0
^^^^^^^^
Я хочу этот код или полный uuid. Тот же идентификатор также используется в панели управления, статистике и журналах.
export default {
async fetch(request, env, ctx) {
const cacheUrl = new URL(request.url);
// Конструируем ключ кэша из URL кэша
const cacheKey = new Request(cacheUrl.toString() + currentActiveVersion, request);
^^^^^^^^^^^^^^^^^^^^
Ответ или решение
Чтобы получить версию развернутого артефакта Cloudflare Worker в коде, вы можете использовать переменные окружения и встроенные функции API. Поскольку Cloudflare Workers не предоставляет прямого способа для доступа к версии развертывания (таким как идентификатор развертывания), вы можете использовать некое альтернативное решение.
Один из способов – это хранить версию в переменных окружения непосредственно через ваш wrangler.toml
файл при развертывании. Вы можете добавить версию как переменную окружения, а затем получить её внутри вашего Worker.
Шаги для решения задачи:
-
Добавление версии в
wrangler.toml
:
Вам нужно определить переменные окружения в вашемwrangler.toml
файле. Для этого добавьте секцию[env]
илиvars
и укажите версию:[env.production] vars = { VERSION = "1.0.0" }
При каждом обновлении вашего кода, вы должны будете обновлять значение версии.
-
Использование версии в коде Worker:
Затем в вашем Worker коде вы сможете получить значение переменной окруженияVERSION
следующим образом:export default { async fetch(request, env, ctx) { const cacheUrl = new URL(request.url); // Получаем версию из переменной окружения const currentVersion = env.VERSION; // Строим ключ кэша, на который влияют изменения версии const cacheKey = new Request(cacheUrl.toString() + currentVersion, request); // Логика обработки запроса return new Response("Cache key constructed: " + cacheKey.url); } };
-
Обновление переменной версии:
Каждый раз, когда вы вносите изменения в ваше приложение и развертываете его, не забудьте обновить значениеVERSION
в вашемwrangler.toml
. Это гарантирует, что ваш кэш будет инвалидацией при изменении кода.
Примечания:
- Использование переменной окружения позволяет вам контролировать версию вашего развертывания непосредственно из кода Worker.
- Вы также можете использовать другие средства версионирования приложений, такие как Git, чтобы автоматически обновлять значение версии, но это потребует дополнительной интеграции с вашим процессом развертывания.
Таким образом, вы сможете гарантировать, что ваш кэш будет обновляться при каждом развертывании проекта, предотвращая несоответствия с устаревшими данными в кэше.