Van olyan, hogy az ember egy Drupal modult kikapcsol és összeomlik az egész honlap. Ilyenkor a hagyományos megoldások az admin felületen vagy a Drush parancsok nem működnek (Ilyen történt velem). Hogyan lehet visszakapcsolni a modult?
1. Először is ne töröld ki a modul fájljait, vagy ha kitörölted, akkor ugyanazt a verziót kell ugyanoda visszamásolni.
2. Telepíts fel egy phpMyAdmin-t vagy adminer-t. Ezekkel tudsz kapcsolódni az adatbázishoz és abban módosításokat végezni. Azt javaslom, hogy lehetőség szerint ne default módon telepítsd bármelyiket is, mert akkor megpróbálják előbb-utóbb meghackelni az oldaladat.
3. Lépj be az adatbázis-kezelő felületre a sites/default/setting.php végén lévő adatok segítségével.
$databases['default']['default'] = array (
'database' => '<database neve>',
'username' => '<user neve>',
'password' => '<jelszó>',
'prefix' => '<prefix, ha van>',
'host' => 'localhost',
'port' => '3306',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);
4. Ha sikerült belépnek és kiválasztottad az adatbázist, akkor keresd meg a config táblát és a táblán belül azt a rekordot, amelyben a name mező értéke 'core.extension'.
Esetleg így: SELECT * FROM config WHERE name= 'core.extension'
5. Ennek a rekordnak a data mezőjében található egy serializált (PHP) tömb, amely a telepített modulok listáját tartalmazza. Azt az adatot másold ki egy stringbe és írj egy rövid PHP kódot, amely unserializálja. valahogy így:
<?php
$a = '... ide tedd az adatsort a szerverről ....';
$b = unserialize($a);
$b['module']['modul_belső_neve'] = 0;
$sorted = ksort($b['module']);
$c = serialize($sorted);
print $c;
6. Az oldalra kiírt adatsort kell betenni az előbbi helyre.
Ugyanezt meg kell csinálni a cache_config táblában ugyanerre a rekordra.
7. Érdemes ilyen és ehhez hasonló esetekben az összes cache táblát TRUNCATE SQL paranccsal lenyesni azaz kitörölni a cache-eket.
TRUNCATE cache_config;
TRUNCATE cache_container;
TRUNCATE cache_data;
TRUNCATE cache_default;
TRUNCATE cache_discovery;
TRUNCATE cache_dynamic_page_cache;
TRUNCATE cache_entity;
TRUNCATE cache_menu;
TRUNCATE cache_render;
TRUNCATE cache_toolbar;
Ha mindent jól csináltál, akkor (valószínűleg) visszakerül az adatbázis a helyére.
Megjegyzés
Az elején írtam, hogy kitöröltem egy modult, amit nem kellett volna.
- Backupoltam az adatbázist és lementettem a saját gépemre a Drupal teljes fájltartalmát is.
- Sok kísérletezés után ezzel a módszerrel visszaállítottam a saját gépemen a modult, majd visszaállt a rendszer.
- Ugyanezt megcsináltam az éles szerveren is, de semmi sem változott.
- Végül a megjavított adatbázist backupoltam a fejlesztői gépen és beimportáltam az éles szerverre.
Így már működött a visszaállítás.