Jelikož jsem v současnosti potřevobal udělat pár nových webů a jelikož je aktuální Drupal ve verzi 7.7 (v době psaní příspěvku) pochopitelně jsem jej nasadil na nové weby a nevypadal vůbec zle (na první pohled - na ten druhý už to tak růžové nebylo, ale o tom jindy) a tak jsem se rozhodl pokusit se o upgrade nějakého stávajícího, který spokojeně funguje na Drupalu 6. Volba padla ma soukromé rodinné stránky, které jsou již skoro 2 roky neaktualní a případné odstavení napáchá minimum škody.
Tedy začněmež. Výchozí stav byl - nejaktulálnější Drupal verze 6, nějaké ty celkem běžné moduly a lehce modifikované téma vzhledu (foliage). Postup přesně dle návodu (tedy souboru UPGRADE.txt v rozbaleném Drupalu 7). Po zadání obligátního http://domena.com/update.php jsem celkem s klidem ignoroval hromadu Warning hlášek v hlavičce stránky a pokračoval klasickým Continue. Po dokončení procesu upgrade databáze začala teprve ta správná zábava.
Takže první kolo dopadlo následovně:
The following updates returned messages
user module
Update #7000
User passwords rehashed to improve security
Update #7002
Migrated user time zones
node module
Update #7008
Failed: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'weight' in 'order clause': SELECT r.rid AS rid, r.name AS name FROM {role} r INNER JOIN {role_permission} p ON r.rid = p.rid WHERE (p.permission = :db_condition_placeholder_0) ORDER BY weight ASC, name ASC; Array ( [:db_condition_placeholder_0] => administer nodes ) in user_roles() (line 2741 of /home/www/ciganek.cz/www/modules/user/user.module).
filter module
Update #7003
Failed: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-filter_autop' for key 1: INSERT INTO {filter} (format, module, name, weight, settings, status) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5); Array ( [:db_insert_placeholder_0] => 1 [:db_insert_placeholder_1] => filter [:db_insert_placeholder_2] => filter_autop [:db_insert_placeholder_3] => 2 [:db_insert_placeholder_4] => a:0:{} [:db_insert_placeholder_5] => 1 ) in filter_update_7003() (line 334 of /home/www/ciganek.cz/www/modules/filter/filter.install).
system module
Update #7007
Inserted into {role_permission} the permissions for role ID 1, Inserted into {role_permission} the permissions for role ID 2, Inserted into {role_permission} the permissions for role ID 3
Update #7061
Upload module has been migrated to File module.
Update #7067
Failed: PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'weight' in 'order clause': SELECT r.rid AS rid, r.name AS name FROM {role} r INNER JOIN {role_permission} p ON r.rid = p.rid WHERE (p.permission = :db_condition_placeholder_0) ORDER BY weight ASC, name ASC; Array ( [:db_condition_placeholder_0] => access administration pages ) in user_roles() (line 2741 of /home/www/ciganek.cz/www/modules/user/user.module).Tedy celkem 3 Failed aktualizace. Vyřešit problém s aktualizací modulu user a system se podařilo celkem brzo pomocí dotazu do fóra. Zájemcům mohu zaslat modifikovaný system.install a user.install. Zajímavé je, že jsem musel tyto upravené soubory použít ve všech verzích Drupalu - 7.2, 7.4 i 7.7 - předpokládám, že chyba je tedy spíš u mne, protože při čisté instalaci D7.7 nebo update z 7.4 na 7.7 žádný problém není.
Horší to bylo s tím filtrem. Nevím uplně přesně k čemu ta tabulka je, každopádně jsem to řešil na fóru snad několik měsíců.
Zjednodušeně: chybová hláška říká, že při vkládání dat do tabulky filter došlo k poruše integrity - tedy vkládaný záznam nevyhovuje nějakému unikátnímu indexu, tedy ještě jinak, záznam obsahuje nějakou kombinaci nějakých hodnot, které v tabulce již jsou a tato kombinace je definována jako unikátní a tedy se nesmí opakovat.
No a vzhledem k tomu, že se chyba objevila zřejmě při převodu starých dat do nově vytvořené tabulky, tak bylo zjištěno (pochopitelně ne mnou, ale někým kdo tomu opravdu rozumí), že mi opravdu v tabulce filter chyběl unikátní index fmd (sloupce format, module a delta).
Řešení pak bylo nasnadě. Celkem drze jsem vymazal "duplicitní" záznamy a index vytvořil. POZOR, při novém pokusu o upgrade musíte vycházet znovu z původní databáze, znovuspuštění update.php způsobí úplně jsou chybu ;-)
Takže po několika měsících zkoušení a rezignovaných návratu k Drupalu 6 jsem po konečně bezchybném průběhu procesu upgrade uviděl následující administrační stránku Drupalu verze 7:
A jak sami vidíte, to již dávalo naději na snadné dokončení průběhu migrace.
Ale o tom zas příště.

Žádné komentáře:
Okomentovat