# Háttérfeldolgozás (aszinkron) hibaelhárítása

> Mire használ a Gravity Forms háttérfeldolgozást, hogyan ellenőrizheted, hogy működik-e, mit jelentenek a naplóbejegyzések és a gyakori hibakódok, és mit tehetsz ellenük.

A háttérfeldolgozás külön kérésben dolgozza fel a feladatokat, így nem blokkolja az éppen futó műveletet, például az űrlap beküldését.

## Mire használja a Gravity Forms?

- Adatbázis-frissítések.
- Telemetria.
- Feedfeldolgozás azokban a kiegészítőkben, amelyek a feed-kiegészítő keretrendszerre épülnek, és jelzik, hogy támogatják az aszinkron feedfeldolgozást.
- Értesítések. Ezt az **Űrlapok → Beállítások** oldalon a **Háttérértesítések** kapcsolóval kapcsolhatod be és ki. Új telepítésnél alapból be van kapcsolva.
- Egyes külső kiegészítők, például a Gravity PDF, a PDF-et tartalmazó értesítéseket is a háttérben küldhetik, így a beküldés nem késik.

## Működik a háttérfeldolgozás az oldalamon?

Ehhez az oldalnak POST kérést kell tudnia küldeni a saját Admin Ajax címére a WordPress HTTP API-jával.

### Oldal állapota

Az **Eszközök → Webhely állapota** oldalon a sikeres tesztek között legyen ott: az ütemezett események futnak, a HTTP-kérések a várt módon működnek, az oldal végre tud hajtani loopback-kéréseket. Ha bármelyik hiányzik, a háttérfeladatok feldolgozása is gondot okozhat.

### Rendszerállapot

Az **Űrlapok → Rendszerállapot** oldalon a WordPress-környezet részben a **Háttérfeladatok** soránál **Igen** értéknek kell állnia. Hiba esetén ugyanitt látod a hibaüzenetet vagy a válasz állapotkódját. A rendszerállapot oldalról a [rendszerállapot fejezetben](https://hub.hellowp.io/hu/plugins/gravityforms/hibaelharitas-rendszerallapot/) olvashatsz.

## Feldolgozódnak a feladatok?

1. Kapcsold be a naplózást az **Űrlapok → Beállítások** oldalon, és mentsd a beállításokat.
2. A naplózás oldalán kapcsold be a naplózást a Gravity Forms magjához és az összes kiegészítőhöz.
3. Indítsd el a feldolgozást: küldd be az űrlapot, vagy futtasd az adatbázis-frissítést a **Rendszerállapot** oldalról.
4. Nézd meg a naplókat.

### Példa naplóbejegyzések a mag naplójában

A `[processor_slug]` lehet `gf_upgrader`, `gf_feed_processor`, `gf_notifications_processor`, `gf_[kiegészítő rövid neve]_feed_processor` vagy külső kiegészítő azonosítója (például `gravitypdf`). Nem minden bejegyzés jelenik meg minden beküldésnél.

| Naplóbejegyzés (`GF_Background_Process::…`) | Jelentés |
|---|---|
| `dispatch_on_shutdown(): Aborting. Queue is empty for …` | A sor üres, nincs mit indítani. |
| `dispatch_on_shutdown(): Dispatch delayed until shutdown for …` | Az indítás az oldal leállásáig késik. |
| `save(): Saving batch [id]. Tasks: [db].` | Egy köteg mentése a sorba. |
| `dispatch(): Running for …` | A feldolgozás indítása. |
| `schedule_event(): Scheduling cron event for …` | Tartalék cron-esemény ütemezése. |
| `dispatch(): Unable to dispatch tasks to Admin Ajax: …` | Az Admin Ajax kérés nem sikerült (lásd a hibatáblázatot). |
| `maybe_handle(): Running for …` | A feldolgozást az Admin Ajax indította. |
| `handle_cron_healthcheck(): Running for …` | A feldolgozást a cron indította. |
| `handle(): Running via [módszer] request for …` | A feldolgozás elindult. |
| `handle(): Processing batch [id]; Tasks: [db].` | Egy köteg feldolgozása. |
| `update(): Batch [id] updated. Tasks remaining: [db].` | A köteg frissítve, ennyi feladat maradt. |
| `handle(): Processing task [n]. Attempt number: [m].` | A feladat feldolgozása és a próbálkozás száma. |
| `GF_Feed_Processor::task(): Aborting. Add-on ([slug]) not found …` | A feedhez tartozó kiegészítő nem található. |
| `GF_Feed_Processor::task(): Aborting. Error occurred during processing of batch …` | Hiba a köteg feldolgozásakor, a részleteket a bejegyzés tartalmazza. |
| `handle(): Removing task [n] from batch.` | A feladat kikerült a kötegből. |
| `handle(): Batch completed for …` | A köteg elkészült. |
| `delete(): Deleting batch [id].` | A köteg törlése. |
| `handle(): All batches completed for …` | Minden köteg kész. |
| `clear_scheduled_event(): Clearing cron event for …` | A tartalék cron-esemény törlése. |

### Példa naplóbejegyzések egy kiegészítő naplójában

A `GF_Background_Process` bejegyzései a kiegészítő naplójában csak a Gravity Forms 2.9.25-ös vagy újabb verziójától jelennek meg. A fenti bejegyzéseken kívül ezeket látod:

| Naplóbejegyzés | Jelentés |
|---|---|
| `GFFeedAddOn::maybe_process_feed(): Adding feed (#[id] - [név]) to the processing queue for entry #[id].` | A feed bekerült a feldolgozási sorba. |
| `GF_Feed_Processor::task(): Preparing to process feed …` | A feed feldolgozásának előkészítése. |
| `GF_Feed_Processor::task(): Aborting. Entry #[id] not found for feed …` | A bejegyzés nem található. |
| `GF_Feed_Processor::can_process_feed(): … has already been processed … Reprocessing is NOT supported / NOT allowed / IS allowed.` | A feedet már feldolgozták ehhez a bejegyzéshez; az újrafeldolgozás nem támogatott, nem engedélyezett vagy engedélyezett. |
| `GF_Feed_Processor::task(): Aborting. Feed … attempted too many times …` | A feedet túl sokszor próbálták; a bejegyzés mutatja a próbálkozások számát és a korlátot. |
| `GF_Feed_Processor::task(): Starting to process feed …` | A feed feldolgozása elindult. |
| `GF_Feed_Processor::task(): Aborting. Error occurred during processing of feed …` | Hiba a feed feldolgozásakor. |
| `GF_Feed_Processor::task(): Completed processing of feed …` | A feed feldolgozása kész. |

### Adatbázis-frissítés naplói

| Naplóbejegyzés | Jelentés |
|---|---|
| `GF_Background_Upgrader::task(): Running callback: …` | A frissítési lépés fut. |
| `… Callback needs another run: …` | A lépést még egyszer futtatni kell. |
| `… Finished callback: …` | A lépés kész. |
| `… Could not find callback: …` | A lépés nem található. |

## Gyakori hibák

A legtöbb hiba a kiszolgáló beállításaira vezethető vissza, ezért gyakran a tárhelyszolgáltatóhoz kell fordulnod.

| Hiba | Mit jelent és mit tegyél |
|---|---|
| cURL error 6: Could not resolve host | A domain DNS-beállításával vagy a kiszolgálóval van gond. Fordulj a tárhelyszolgáltatóhoz. |
| cURL error 7: Failed to connect … port 443: Connection refused | Kiszolgálóoldali probléma okozhatja; a tárhelynek frissítenie kell a csomagokat (PHP, cURL, OpenSSL). Cloudflare használatakor annak SSL-beállítása is okozhatja; néhány esetben a Cloudflare átmeneti kikapcsolása megoldotta, tartós megoldáshoz a Cloudflare támogatásához kell fordulni. |
| cURL error 28: Operation timed out | Időtúllépés. A megoldáshoz keress segítséget a „cURL error 28 in WordPress” témában. |
| cURL error 35: SSL handshake failure | Valami módosítja a kérések URL-jét (lásd a 404-es hibát). |
| Response code: 401 | Az oldalon alapszintű hitelesítés van. Lásd lent. |
| Response code: 403 | Biztonsági szolgáltatás, bővítmény vagy kiszolgálómodul blokkolja az `admin-ajax.php` elérését. Lásd lent. |
| Response code: 404 | Valami módosítja a kérések URL-jét. Lásd lent. |

### 401-es válaszkód

Ha az oldalon alapszintű hitelesítés van, az `http_request_args` szűrővel add hozzá az `Authorization` fejlécet az Ajax-kéréshez:

```php
add_filter( 'http_request_args', 'http_request_args_basic_auth', 10, 2 );
function http_request_args_basic_auth( $args, $url ) {
    if ( strpos( $url, admin_url( 'admin-ajax.php' ) ) === 0 ) {
        $args['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );
    }
    return $args;
}
```

A példa feltételezi, hogy a `USERNAME` és a `PASSWORD` állandót máshol (például a `wp-config.php` fájlban) definiáltad. Ha nem, írd be közvetlenül az értékeket.

### 403-as válaszkód

Gyakori okok:

- egy biztonsági funkciójú bővítmény vagy a témába tett egyedi függvény blokkolja a `wp-admin` vagy az `admin-ajax.php` elérését;
- `.htaccess` szabályok blokkolják, amelyeket gyakran biztonsági bővítmények tettek be, és a bővítmény kikapcsolása után is megmaradtak;
- kiszolgálóoldali biztonsági modul vagy tűzfal (például ModSecurity), illetve külső szolgáltatás (például Cloudflare) fogja meg a kérést.

Segíthet a kézi ütközésvizsgálat, ha a hibát nem `.htaccess` szabály okozza ([lásd az ütközésvizsgálat fejezetet](https://hub.hellowp.io/hu/plugins/gravityforms/hibaelharitas-utkozesvizsgalat/)). Ha az sem hoz eredményt, kérj segítséget a tárhelyszolgáltatótól.

### 404-es válaszkód

Ellenőrizd a következőket:

- a **Beállítások → Általános** oldalon a **Webhely címe (URL)** helyes-e;
- a `wp-config.php` fájlban a `WP_SITEURL` nem rossz címre mutat-e;
- az adatbázis `wp_options` táblájában a `siteurl` értéke helyes-e;
- végezz kézi ütközésvizsgálatot.

Ha ezek után is 404-es hiba látszik a rendszerállapot oldalon, kérj segítséget a tárhelytől.

## Tartalék cron-feladat

Közvetlenül azelőtt, hogy a háttérfeldolgozó elküldi az Ajax-kérést, tartalék cron-feladatot is ütemez. Ezt csak akkor használja a rendszer, ha az Ajax-kérés nem indítja el a feldolgozást, vagy időtúllépés miatt a sor kiürülése előtt megszakad. Hogy az oldalad támogatja-e a cron-feladatokat, az [ütemezett események fejezetben](https://hub.hellowp.io/hu/plugins/gravityforms/hibaelharitas-utemezett-esemenyek/) ellenőrizheted.

## Szüneteltetés és folytatás

Ha egy feed-kiegészítő hibába ütközik a feldolgozás közben, a feladatsor átmenetileg szünetel. A feldolgozásnak a tartalék cron-esemény indulásakor magától folytatódnia kell.
