---
title: "Quireን ሳያቋርጡ ማሻሻል"
description: "በራስዎ የሚያስተናግዱትን Quire ሳያቋርጡ ያሻሽሉ።"
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/am/llms.txt
> Use this file to discover all available pages before exploring further.

# Quireን ሳያቋርጡ ማሻሻል

<span id="upgrading-without-downtime"></span>

ህጎቹ በ`docs/architecture/23-ops.md` ክፍል 7 እና በ`docs/architecture/07-data.md` ክፍል 4.1 ውስጥ ተገልጸዋል። ይህ የሚከተለው ሂደት ነው።

## ደህንነቱን የሚያረጋግጠው ዋስትና <!--quire:the-guarantee-that-makes-it-safe-->

**የR ልቀት ከR ስኪማና ከR ቀደም ባለው ስኪማ ጋር በትክክል ይሰራል።** እያንዳንዱ የስኪማ ለውጥ በማስፋፋት፣ በሽግግርና በማጥበብ ደረጃዎች ይከፈላል፦

1. **ማስፋፋት**፦ አዲሱን አምድ፣ ሰንጠረዥ ወይም ኢንዴክስ ያክሉ። አሮጌው ኮድ ችላ ይለዋል።
2. **ሽግግር**፦ ቢያንስ ለአንድ ልቀት አዲሱ ኮድ ሁለቱንም ቅርጾች ይጽፋል፣ አዲሱንም ያነባል፤ ከቀድሞ ረድፎች ውሂብ ለመሙላት እንደገና ሊቀጥል የሚችል ስራ ይካሄዳል።
3. **ማጥበብ**፦ በኋለኛ ልቀት ውስጥ ብቻ አሮጌውን ቅርጽ ያስወግዱ።

ስለዚህ በማንኛውም ቀስ በቀስ ማሻሻያ ወቅት አሮጌና አዲስ ሂደቶች አንድ ውሂብ ጎታ ሊጋሩ ይችላሉ። ወደ ቀድሞ ስሪት የሚመልስ ማይግሬሽን የለም፤ ከአንድ ሰዓት በፊት አምድ የሰረዘ ማይግሬሽን በዚያ ሰዓት የተጻፉትን ረድፎች መመለስ አይችልም።

የ`schema-compat` CI ስራ ይህን ዋስትና በእያንዳንዱ ልቀት ይፈትሻል፤ የቀደመውን ልቀት ሙከራዎች በአዲሱ ስኪማ ላይ ያስኬዳል።

## ከመጀመርዎ በፊት <!--quire:before-you-start-->

1. የልቀቱን ማስታወሻዎች ያንብቡ። የጥገና ጊዜ የሚፈልግ ልቀት ይህንና የሚጠበቀውን ጊዜ ይጠቅሳል፤ በአንድ ልቀት ከአንድ አይበልጥም።
2. የrestore ልምምዱን ያካሂዱ ወይም ለዚህ ልቀት በስኬት መጠናቀቁን ያረጋግጡ ([backup-restore.md](/am/ops/backup-restore/))። ያልተሳካ ልምምድ ማሻሻያውን ያግዳል።
3. መነሻ ምትኬ ይውሰዱ፦ `docker compose -f docker/compose.yaml --profile backup
   run --rm backup`።

## Docker Compose፣ አንድ አገልጋይ <!--quire:docker-compose-one-host-->

```sh
export QUIRE_RELEASE=2026.10.0            # or set it in docker/.env
docker compose -f docker/compose.yaml pull   # or build
docker compose -f docker/compose.yaml run --rm migrate
docker compose -f docker/compose.yaml up -d --no-deps web content collab
docker compose -f docker/compose.yaml up -d --no-deps worker scheduler
```

ቅደም ተከተሉ በሆነ ምክንያት ተመርጧል፦

1. **መጀመሪያ ማይግሬት ያድርጉ**፣ አሮጌው ልቀት ትራፊክን እያገለገለ ሳለ። የማስፋፊያ ማይግሬሽኖች ለእሱ አይታዩም።
2. **ቀጥሎ የድር ክፍሉን።** SIGTERM ሲደርስ እያንዳንዱ የድር ሂደት `/readyz`ን ወደ `draining` ይቀይራል፣ በሂደት ያሉ ጥያቄዎችን 30 ሰከንድ ውስጥ ያጠናቅቃል፣ ለድጋሚ ግንኙነት ምክር በመስጠት ዥረቶችን ይዘጋል፣ ከዚያም ይወጣል። `stop_grace_period` 40 ሰከንድ ስለሆነ Compose ጤናማ የማቆሚያ ሂደትን አያቋርጥም።
3. **Workerዎችን በመጨረሻ።** አዲሱ የክስተት ቅርጽ አዲሱ ተቀባይ ከመጠበቁ በፊት እንዲመረት። Workerዎች ማምጣትን ወዲያውኑ ያቆማሉ፣ 120 ሰከንድም ያገኛሉ፤ ያልተጠናቀቀ ስራ በሌላ ቦታ እንደገና ይወሰዳል፣ ይህም እያንዳንዱ ስራ idempotent ስለሆነ ደህና ነው። Scheduler በሚቀጥለው ዙር መሪነቱን ያስረክባል።

በአንድ አገልጋይ Compose ኮንቴይነሮችን በተራ ስለሚተካ ለእያንዳንዱ አገልግሎት አጭር ክፍተት ይኖራል። ምንም ክፍተት እንዳይኖር የድር ክፍሉን ከራስዎ proxy ጀርባ በሁለት ኮንቴይነሮች ያስኪዱ (ሁለተኛ web አገልግሎትን ያለ የውጭ ለደንበኛ የታተመ port የሚጨምር override ፋይል በመጠቀም)፣ አንዱን በአንድ ጊዜ ይፍጠሩ፣ ቀጣዩን ከመጀመርዎ በፊት ጤናማ መሆኑን ይጠብቁ።

## ብዙ አገልጋዮች ወይም ኦርኬስትሬተር <!--quire:several-hosts-or-an-orchestrator-->

ተመሳሳይ ቅደም ተከተል ይከተሉ፦ ከአንድ ስራ አንድ ጊዜ ማይግሬት ያድርጉ፣ ከዚያ የድር ክፍሉን በአንድ ተጨማሪ ኮንቴይነር እየጨመሩ ቀስ ብለው ያዘምኑ፣ ከዚያም workerዎችን። የreadiness ምርመራን `/readyz` ላይ፣ livenessን `/healthz` ላይ ያድርጉ።

የተለዩ የተከራይ ውሂብ ጎታዎች ሲኖሩ `migrate` ደረጃው ሁለቱንም ያደርጋል፤ መጀመሪያ የመቆጣጠሪያውን ውሂብ ጎታ፣ ከዚያ በ`ops.tenant_database` የተዘረዘሩትን ሁሉ አንድ በአንድ በራሳቸው lock ስር ያዘምናል። በአንዱ የተከራይ ውሂብ ጎታ ያለ ስህተት ሌሎቹን አያቆምም። ሁሉም ሲጠናቀቁ የማይግሬሽን መዝገቦችን ያነጻጽራል፤ የውሂብ ጎታዎቹ ከመቆጣጠሪያው የተለዩ ማይግሬሽኖችን ካደረጉ ወይም ካልደረሱበት ስማቸውን በመጥቀስ በስህተት ይወጣል። Worker የተከራይ ስራዎችን በተመደቡበት ውሂብ ጎታ ስለሚያነብ፣ ተመሳሳይ ትእዛዝ በእያንዳንዱ ውሂብ ጎታ queue ሰንጠረዦችንም ይጭናል።

```sh
bun apps/worker/src/migrate.ts   # what the Compose step runs
bun run db:migrate:all                            # the same, from a checkout
```
እንደምሳሌ የሚሰረስ ማሸጋገሪያ እና የመጀመሪያ አሰላሽ አዘጋጅት የQuire ተጠቃሚውን ቀጥታ በእንግሊዝኛ የሆነ መረጃ ሰነዶችንም ወደ `ops.platform_policy_version` ያስገባሉ። መያዣው የራሱን መልስ የሚያደርግ ነው፦ የጠፉ አንግሊዝኛ ዝርዘር ጽሑፎች እና በትክክል ከማሸገጣቸው በተሆኑ ቦታ ሙያ ጽሑፎች ብቻ ይተካሉ። የማሸገጣቸው ግርቶች በማስቀመጥ ላይ ይጣራሉ እና አዲስ የተታተረ ዝርዝር ይገባል፤ የታሪክ የመቀበያ ማጣቀሻዎችና ጽሑፎች ይጠበቃሉ። በእውነት በተጠቃሚው የተጻፈ የማንኛውም ዝርዝር በላይነገር ከዚህ ስምትፍ ጨምሮ ተጠብቆ እንደነገር መቆጠሩ በፕላትፎም የመመሪያ ኮንሶል መስተናቀቅ ይገባል። የተከራይ የመመሪያ ሰነዶች፣ ዝርዝሮችና ፈቃድ በዚህ ማለዋወር ፈጽሞ አይቀየሩም። ይህ የተጠቃሚ ጽሑፍ ማሳተም ነው፤ ሕጋዊ ማረጋገጫ ወይም የተስተራሙ ደረጃዎችን በራሱ ማፈጸም አይደለም።


እያንዳንዱ የተለየ ውሂብ ጎታ በተመዘገበበት ስም ይደረስበታል። እንደ `env:QUIRE_DB_NORTHWIND_URL` የተመዘገበ ውሂብ ጎታ የሚከተሉትን ይፈልጋል፦

| ተለዋዋጭ | ጥቅም |
| --- | --- |
| `QUIRE_DB_NORTHWIND_URL` | ለድር ክፍሉና worker የመተግበሪያ ሚና |
| `QUIRE_DB_NORTHWIND_URL_MIGRATOR` | ለዚህ ትእዛዝና ለውሂብ ጎታ ማንቀሳቀሻዎች የmigrator ሚና |
| `QUIRE_DB_NORTHWIND_URL_SUPERUSER` | አማራጭ፦ ከማይግሬት በፊት ማስነሻውን (ሚናዎች፣ ስኪማዎች፣ አጋዥ ነገሮች) እንደገና ያስኬዳል |

`_MIGRATOR` ግንኙነት የሌለው የተመዘገበ ውሂብ ጎታ እንደ ስህተት ይቆጠራል፤ ፈጽሞ አይዘለልም። የመቆጣጠሪያው ውሂብ ጎታ ከተጠናቀቀ በኋላ የድር ክፍሉ በቀስታ ሊዘመን ይችላል። የተከራይ ውሂብ ጎታ በአንድ ሰዓት ከዘገየ ማስጠንቀቂያ፣ በአንድ ቀን ከዘገየ ማንቂያ ይላካል።

## pgvector <!--quire:pgvector-->

ከማይግሬሽን 0264 ጀምሮ grounding corpus አገልጋዩ extension ካለው የpgvector HNSW ኢንዴክስ ይጠቀማል፤ Compose `postgres` አገልግሎት ከእሱ ጋር ተሰርቷል (`docker/postgres.Dockerfile`)። ወደ አዲስ image ከተቀየሩ በኋላ የመጀመሪያው `migrate` extensionውን በsuperuser ማስነሻ ይፈጥራል፤ 0264 ደግሞ የተፈጠረ vector አምድና ኢንዴክሱን ይጨምራል። አምዱን መጨመር `app.ai_chunk`ን አንድ ጊዜ በexclusive lock ይጽፋል፤ ስለዚህ grounding ጥያቄዎች ይጠብቃሉ፤ ሌላ ምንም ነገር ሰንጠረዡን አይነካም።

pgvector በሌለው አገልጋይ 0264 ማስታወሻ ይጽፋልና ምንም አይቀይርም፤ ፍለጋው ትክክለኛ ይቀጥላል። ከ0.8 የቆየ pgvector ላይ አምዱና ኢንዴክሱ ይገነባሉ፣ ግን ለተጣራ HNSW ፍለጋ የ0.8 ተደጋጋሚ ፍለጋ ስለሚያስፈልግ extensionው እስኪዘምን ድረስ ፍለጋው ትክክለኛ ይቀጥላል (`alter extension vector update`)። በኋላ ማንቃት ከፈለጉ extensionውን ይጫኑ፣ ማስነሻውን እንደገና ያስኪዱ (ወይም superuser `create extension vector` ያስኪድ)፤ ከዚያ እንደ `quire_migrator`፦

```sql
set maintenance_work_mem = '1GB';  -- the HNSW build is much faster in memory
select ops.ai_chunk_enable_vector_index();
```

ይህ ተደጋጋሚ ሲሆን `enabled` ወይም `unavailable` ይመልሳል። በእያንዳንዱ የተከራይ ውሂብ ጎታ ላይም ያስኪዱት።

## ወደ ቀድሞ ስሪት መመለስ <!--quire:rolling-back-->

የ**ኮድ** መመለስ ሁልጊዜ ይቻላል፦ `QUIRE_RELEASE`ን ወደ ቀደመው tag ያድርጉና `up -d`ን እንደገና ያስኪዱ። በልቀቱ ውስጥ ስኪማው በሁለቱም አቅጣጫ ስለሚስማማ ይሰራል።

የ**ስኪማ** መመለስ አይደገፍም። የማይመለሱትና የማገገሚያ መንገዳቸው፦

| የማይመለስ | ማገገሚያ |
| --- | --- |
| አምድ የሰረዘ የcontract ማይግሬሽን | ከመሰረዙ በፊት በጊዜ የተመረጠ ምትኬን ወደ አዲስ ውሂብ ጎታ መመለስ፣ ማውጣትና ማዋሃድ |
| በቦታው የተቀየረ ውሂብ | ተመሳሳይ ማገገሚያ፣ ከዚያ በኋላ የተጻፉ ለውጦችን ማስማማት |
| የተላኩ የድር ማሳወቂያዎችና ክስተቶች | የማካካሻ ክስተቶች፤ ፈጽሞ መሰረዝ አይደለም |
| የተላከ ኢሜይል | ሰው የክትትል መልዕክት ይጽፋል |
| የaudit hash ሰንሰለት | ፈጽሞ አይጻፍበትም፤ የማስተካከያ መዝገብ ይጨመራል |

ለዚህ ነው contract ማይግሬሽን ብቻውን የሚለቀቀው፤ ማገገሚያውም ግልጽ ድንበር አለው።

## ማሻሻያውን መፈተሽ <!--quire:checking-the-upgrade-->

```sh
docker compose -f docker/compose.yaml ps           # every service healthy
curl -fsS http://localhost:8080/readyz             # ready, and what is configured
docker compose -f docker/compose.yaml logs migrate # the migrations applied
```

Source: https://docs.quirelms.com/am/ops/upgrade/index.mdx
