Jump to content

Külső készlet és ár szinkronnál gyorsítótár törlése szükséges


Libra-07
 Share

Recommended Posts

Az utóbbi időben több ügyfélnek készítettünk PrestaShop Webáruházat. Megszerettük, mert egyszerű, megbízható és nincsen benne sok felesleges dolog. Pont arra jó, amire kitalálták. Most belefutottunk az első problémába, amire nem találtunk megoldást. Hátha itt tud valaki segíteni.

Számos ügyfelünk a saját fejlesztésű készletnyilvántartó rendszereink egyikét használja. Kéréseikre fejlesztettünk a különböző verziókhoz szinkronizálót is (csak készlet mennyiség vagy készlet+ár+kedvezmény). Az alábbi hibát egyelőre PrestaShop 1.6 verzión találtuk, 1.7 alatt nem ellenőriztük.

A szinkron maga tökéletesen lefut. 5-10 mp alatt több ezres cikktörzsnél is szépen leszinkronizálja a készlet darabszámokat. Nem tart szerencsére 10-20 percig, mint a készen kapható szinkronizáló modulok. Megnézve a PrestaShop adattábláit, frissültek is az adatmezők. A PrestaShop részletes termék adatlapján frissült is a készlet az ár és a kedvezmény %-ok. Azonban a főoldalon megjelenő pl. #homefeatured nézetben (modulban) nem frissül. A legutóbbi ár marad ott. Oldal teljes frissítése a böngészőn sem oldja meg. El kell indítani kézzel a PrestaShop -> Advanced Parameters -> Teljesítmény -> Gyorsítótár ürítése funkciót és utána minden rendbe jön. Frissülnek az árak és kedvezmény %-ok.

A PrestaShop alapbeállításokon nem nagyon változtattunk:

SMARTY beállítások:
Sablonkompilálás = Soha ne generálja újra a sablon fájlokat
Gyorsítótár típus = Fájlrendszer
Gyorsítótár ürítése = A gyorsítótár törlése minden módosítás után

Gyorsítótárazás:
Gyorsítótárazás = Nem

Erre van valami megoldás, hogy a kézi gyorsítótár ürítés nélkül ez frissüljön a főoldalon is?

Köszönettel!

Share this post


Link to post
Share on other sites

Voltak olyan nem teljesen stabil egyhatos verziók ahol annak ellenére is gyorsítótárazott a rendszer, hogy az nem volt a teljesítmény fülön bekapcsolva.

Tudni kellene a pontos verziószámot egyhatoson belül.

Csak mellékszál: "Sablonkompilálás = Soha ne generálja újra a sablon fájlokat" => ez nem jó beállítás, át kell rakni a középsőre, hogy akkor generáljon ha a fájlok változtak.

Ha nem akartok frissíteni ps verziót, akkor a szinkronotok végére simán tegyetek be (gondolom php-vel történik a feldolgozás) egy cacheflush parancsot az egész shopra vonatkozólag - az olyan, mintha megnyomnátok a teljesítmény fülön az ürítés gombot.

Share this post


Link to post
Share on other sites

Szia Attila!

Köszönöm a válaszodat!
Megnéztem, ez a verzió fut: 1.6.1.18
Eredetileg a legutolsó 1.6-osat, az 1.6.1.24 verziót akartuk használni, de annak a telepítése többszöri próbálkozásra sem akart anno végigfutni. A korábban stabilan használt 1.6.1.18 viszont csont nélkül feltelepült, így az került fel.

Sajnos Presta-nál párszor belefutottunk abba, hogy az FTP-s file felülírásos frissítés után a Presta nem működött, így ezt nem mertük bevállalni. Így ez a verzió nem frissült. De minden más szépen stabilan ment eddig. Úgy láttuk, hogy a Presta-nál a frissítés sajnos nem egy olyan egyszerű dolog, mint egy más fajta CMS oldalnál, ahol van rá egy saját menüpont, ami automatikusan megcsinálja az alapverzió frissítését. A file-ok felülírásával pedig problémás az egyedi átalakítások és nyelvi fordítások, illetve CSS módosítások felülírása. Lehet, hogy egy későbbi Presta 1.6 verzió többek között ezt is javítaná?

Ezt akkor átállítottam, de ez nem javította meg. De ezt gondoltuk is, mivel írtad, hogy csak mellékszál:
Sablonkompilálás = Sablon fájlok generálása ha azok változtak

A szinkronunkat egy teljesen külön kis PHP program vezérli, amit a CRON futtat. Ez közvetlenül adatbázis tábla szinten frissít SQL-lel.
Ide hogy lehet beletenni a cacheflush parancsot? Gondolom, valahogy include-olni kell előtte a Presta config-ot, illetve a szükséges Presta függvényeket.

  • Like 1

Share this post


Link to post
Share on other sites

Szia szia!

Ja értem, értelek. Ha direktben írtok az adatbázisba akkor az én javaslatom nem működik. Ennek ellenére utánanézek a dolognak, nem nagy bűvészmutatvány a megoldása. Ha megvan, megosztom és be tudjátok építeni és/vagy rádobni egy külön php-ben szintén CRON-ként és le van tudva a cacheflush dolog.

1.6.1.18, szerintem annak voltak ilyen cache fájdalmai - dolgozott akkor is ha deaktivált volt. Ha jól emlékszem. 1.6.1.24-nél már ennek mennie kellene. 

Ami a frissítést illeti - van az 1clickupgrade, de őszintén szólva az eredménye kétesélyes és a sikeres végeredményt sok dolog befolyásolja: a szerver minősége, egyedi témát használtok-e vagy sem, milyen pluszban telepített modulok vannak, van-e egyedi fejlesztés. Szóval valóban nem olyan mint egy WP.

A nagyon egyedi dolgok vs. frissítés dologra a Prestashop kitalálta az override-ot, vagyis mindenféle külön hozzárakott/módosított dolog nem a core-ba nyúl bele, hanem külön felülírt lehetőségként működik. Ez elméletben kiváltja a frissítéses problémákat, a gyakorlat viszont más. Ha a frissítés (fontos, hogy generáción belüli frissítésekre gondolok - tehát 1.6-on belül, vagy ha a rendszer 1.7 akkor 1.7-en belül, például 1.7.6.1-ről 1.7.7.2-re) olyan corefájlokat is érint amiknek az override metodikája is más, akkor ugyanúgy le fog halni és vagy csak simán nem működni mintha azt direkt a fájlba írtad volna.

Utánalesek a cacheflush-nak és jelentkezem.

Share this post


Link to post
Share on other sites

Én egy ilyennel megpróbálkoznék (akár külön CRON, akár a ti php-tek végén esetleg):

<?php

include('config/config.inc.php');

    Tools::clearSmartyCache();
    Tools::clearXMLCache();
    Media::clearCache();
    Tools::generateIndex();

?>

 

Share this post


Link to post
Share on other sites

Ma sokat keresgéltem a netes fórumokon és próbálkoztam a forráskódokkal. Találtam egy csomó kódrészt és tippet, de ezek nem működtek.
Találtam egy a tiédhez nagyon hasonló kódot is, de ebben token kérés van. Sajnos ez nem akart futni. Leállt miatt az egész PHP app. Lehet, hogy a Token miatt.
Kipróbálom a tiédet, ami Token nélküli, hátha úgy működik. Utána visszaírok, hogy mi lett. Köszi!

include('./config/config.inc.php');

$token = Tools::getValue('token');

if($token == "vBnmmP3218") {
    Tools::clearSmartyCache();
    Tools::clearXMLCache();
    Media::clearCache();
    Tools::generateIndex();
    echo "Cache clear ended successfully.";
} else {
    echo "Wrong security token - cache clear failed.";
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More