Oké, akkor most megosztok veletek egy tanulságos történetet, ami részben az üzemeltetők, részben a fejlesztők részben pedig a megrendelők nem mindig megfelelő döntéseiknek köszönhetően plusz több órányi munkát okozott.
Adott a szitu: egy félig-meddig rosszul meghozott döntés miatt tárhelyet kell változtatni. Szerencsére nem a teljes tárhelyszolgáltatót, pusztán a tárhelyszolgáltatón belül egy fizikailag másik helyre, új felhasználó alá kell költözni. Ezzel nincs is gond, a szolgáltató párezer forintért elvégzi a műveletet.
Ideális világban (ahol már alapból a váltás sem lenne szükséges, hangsúlyozom, rossz döntések): üzemeltető beír három sort, esetleg négyet a terminálba, gyakorlatilag másol-beilleszt szinten odébb mozgatja a dolgokat, éjszaka átírjuk a doménekre és egyebekre vonatkozó beállításokat, reggelre már az új helyen van a szoftver, változatlanul, leállás nélkül.
Sajnos nem így történt.
Adott az első probléma: FUNCTION
és VIEW
használata a MySQL-ben. Sajnos, a MySQL-nél érezni a határokat, ha programozni
akarunk. Nem egy Oracle a cucc, de még csak nem is egy PostgreSQL; egyszerűen vannak dolgok amik nem a legjobbak. De persze lehet, hogy ez nem is a MySQL baja, egyszerűen a PHPMyAdminé. FUNCTION
-ök, de főként VIEW
-ok exportálása lehetetlen. Ha valaki rájött hogyan kell, dobja az okosságot. Az alap szcenárió az, hogy a VIEW
-ból egyszerűen egy üres tábla lesz. A leírótáblákból még ki lehet nagyjából olvasni a forráskódját, de ha ezt megpróbáljuk lefuttatni, tuti lesz benne valami elcsúszás, amire hibát dob.
Első jótanács: a VIEW
-ok és egyebek forráskódja mindig legyen meg, hogy csak egy mozdulat legyen újra létrehozni.
Aztán folytatódik a történet, tesztelném a szoftvert, bejelentkezek, nem történik semmi. A bejelentkezes.php
fájl egyszerűen visszaugrik saját magára, és még a hibás adatok üzenet sem jelenik meg. Gyorsan belenézünk az éles fájlba, var_dump();
és társai. Persze az ember rögtön tippel pár dologra (én arra tippeltem, hogy nem írták át az adatbázis-elérést, ez lehet a gond, de ez annyira triviális, hogy nem is néztem): fájlok betöltése, .htaccess, jogosultságok stb. A fájl egészen egyszerűen eldobta
a $_POST
tartalmát. Mi lehet a baj? További nyomozás után látom, hogy a beallitasok.php
a ludas. Létrehozok egy teszt.php
fájlt, behívom benne a beállításokat, minden hibajelzés bekapcsolva. Megnyitom, hopp, átugrik a bejelentkezésre. Mi lehet a baj?
Kellett hozzá kis idő, de kibogoztam: van egy modul, ami ügyesen ha hiba van, és éles környezetben működünk, egy szomorú szmájlit mutat a júzernek, közben naplózza a létező összes környezeti változót, és ürít minden szuperglobált. A bejelentkezésre azért irányítódunk át, mert ha nem vagyunk bejelentkezve, semmilyen modul nem elérhető, egyszerűen zongorázunk a bejelentkezéshez. Ami azonban a hiba miatt nem működőképes.
A hibát mondanom sem kell, az okozta, hogy az adatbázis-elérés nem volt átírva, egyszerűen nem sikerült csatlakozni a szerverhez, és hopp, máris nem működik az oldal. Persze, arra kínosan ügyelek, hogy a júzer ne kapjon ötméteres hibaüzenetet, ez a része rendben volt.
Mely elemek voltak rosszak, hibásak, gyengék?
- A megrendelő nem egyeztetett informatikussal, így szükséges volt a tárhelyváltoztatás;
- elrontottam a tervezést, és egy
soha nem futunk bele
hibába futottam bele; - az üzemeltető nem ismerte a kódot, így nem tudta, hol és mit kell átírnia.
Hogyan lehet ezeken javítani?
- Mint megrendelő, minden a szoftverrel akár minimálisan is kapcsolatos témát azonnal egyeztetünk a szoftverért felelős informatikussal. Mindent, mindig.
- Ennél sokkal jobban átgondolni. Megtervezni, lerajzolni, lefuttatni gondolatban, tesztelni, akármi. Mindent, mindig.
- Lehetőleg avassunk be mindenkit, aki fontos lehet a kód működésébe. Dokumentáljunk, még ha regényt is kell írni, hogyan működik a folyamat, mi jön miből. (Ha egy olyan fejlesztőnek kellett volna belenyúlnia, aki nem ismeri a működést, ötször ennyi időbe telt volna megtalálnia a problémát.) Mindent, mindig.
Egyszóval figyeljünk oda, dolgozzunk egymással és egymásnak, legyünk igényesek magunkkal szemben, és ami a legfontosabb: ha elrontunk valamit, akkor merjük leírni és azt mondani, hogy én voltam a hülye, legközelebb erre kell odafigyelnem. Senki sem tökéletes, mindenki vét hibákat. A jó munkaerőt nem a hibátlan munkavégzés, hanem az arra való törekvés, és a saját hibáinak felismerése, azokból való okulása jellemzi.
Zuhanyfüggöny.
Methos
2011. szeptember 29. — 09:34:34
Nem mondom, hogy tökéletes megoldás, de VIEW-ok és FUNCTION-ök kezeléséhez nagyon jól használható a MySQL Workbench. Persze ehhez az is kell, hogy az adott adatbázis szerver távolról is elérhető legyen.
Tamás
2011. szeptember 29. — 10:37:53
Két perc Google után:
[url=http://mysqlhacker.com/kabir/dba/exporting-dumping-views-using-mysqldump.html]MySQL view dumpolás[/url]
[url=http://www.ducea.com/2007/07/25/dumping-mysql-stored-procedures-functions-and-triggers/]MySQL stored procedure, routine és trigger dumpolás[/url]
Ezek nem működtek?
Mefi
2011. október 02. — 13:35:09
[re=6065325]Methos[/re]: igen, ez jó cucc, csak sajnos pont ezért esett ki a dolog, mert nincs hozzáférés távolról, csak PMA-n keresztül.
[re=6065326]Tamás[/re]: ezek valószínűleg működnek, de nincs shell hozzáférésem, így én nem tudtam lefuttatni. Saját gépen célszerű kipróbálni, mit szól hozzá.