Jak jsem upgradoval na Drupal 7 web Screenshots Archive

Drupal 7 je k dispozici od začátku letošního roku, seznam modulů, který s ním již bez problémů fungují, je stále rozsáhlejší, a tak jsem se rozhodl pozvolna začít s přechodem svým webů z Drupalu 6 na Drupal 7. Na začátek jsem ale zvolil spíše složitější případ.

Reklama

Nejprve dovolte krátké představení webu Screenshots Archive. Na počátku tohoto webu byla idea, kdy jsem chtěl vytvořit databázi screenshotů, ve které bude možné vyhledávat, jak vypadaly různé programy v různých svých verzích. Obrázky budou dostupné pro další použití kýmkoli. Web byl zpočátku otevřený, později jsem se rozhodl plnit jej jen sám nebo se svými spolupracovníky. Skutečnost, že nyní nebyl delší dobu aktualizován, pro tuto chvíli pomiňme, pro účely článku není důležitá.

Screenshots Archive byl postaven okolo modulu Image a prakticky se jednalo o můj druhý vlastní větší web postavený na Drupalu, pokud si to dobře pamatuji. Modul Image se mi tehdy jevil jako vhodné řešení - umožňoval jednoduše nahrávat obrázky připojené k obsahovým uzlům a především hromadný import ze složky, do které jsem mohl nahrát větší množství obrázků přes FTP.

Další výhodou modulu Image bylo automatické vytvoření galerií provázaných pomocí systému kategorií v Drupalu. To byl také důvod, proč jsem nesáhl po CCK. Na webu nebyl modul Views a nějaké náročné fotogalerie mi přišly na takovém webu jako zbytečnost. Časem jsem přidal nějaké malé doplňky, jako třeba Cooliris pro podporu efektního prohlížení všech snímků v galerii. Web měl také vlastní téma vzhledu postavené pro Drupal 6.

Ověření podmínek pro upgrade na Drupal 7

Volba modulu Image se mi dnes zpětně jeví jako nešťastná, a to především z toho důvodu, že tento modul nebyl až tak moc flexibilní. Co je však největší problém, trošku se bije s vestavěným modulem pro obrázky v Drupalu 7 - ten se rovněž jmenuje Image. Existuje verze, která zprovozňuje původní funkcionalitu pod trošku upraveným názvem, já se však rozhodl od původního Image odstřihnout a web nějakým způsobem upravit tak, aby nadále využíval základní funkcionalitu obrázkových políček v Drupalu 7.

Jako první věc, kterou je třeba před zvážením upgradu na Drupal 7 udělat, je instalace modulu Upgrade Status, který vás informuje o tom, zda použité moduly jsou již k dispozici pro novou verzi Drupalu. V případě Screenshots Archive chyběly dva - Tagadelic a Cooliris, což nebyly věci podstatné pro fungování webu, takže jsem je jednoduše s přechodem na Drupal 7 zahodil.

Stávající téma vzhledu se mi upravovat nechtělo - zvolil jsem tedy cestu, při které jsem si vybral nový vzhled webu s použitím jednoho z volně dostupných témat na drupal.org.

Upgrade na Drupal 7 startuje

Jelikož to byl můj první web upgradovaný na Drupal 7 a nebyl jsem si jist, jak bude vše probíhat, vytvořil jsem si jeho kompletní kopii na jiném serveru (mimochodem, běžícím na Linode). Vřele doporučuji udělat zálohu, nikdy nevíte, co se může zvrtnout. Upgrade jsem provedl na této kopii, po úspěšném zakončení jsem původní web smazal a soubory i databázi z upravené kopie jsem přesunul do původního umístění. Takový postup lze aplikovat samozřejmě jen v případě, kdy na web nepřispívá moc uživatelů do komentářů nebo jinak, v opačném případě byste jejich příspěvky za posledních pár hodin pohřbili v nenávratnu.

Před převodem jsem ještě upravil logování z 16 týdnů na jeden týden a spustil cron. Tím jsem zmenšil databázi zhruba na polovinu, konkrétně na 35 MB, které se již dají bez problémů exportovat a importovat do komprimovaného souboru přímo v phpMyAdminovi (po kompresi vzniká asi 3 MB soubor).

Aktualizovat Drupal 6, vypnout moduly, zavolat Garland

Jakmile jsem měl pracovní kopii webu, mohl jsem se pustit do práce. V první řadě je velmi dobrý nápad aktualizovat stávající podobu webu na Drupalu 6 tak, aby verze jádra i všech jeho modulů byla aktuální. Následně jsem vypnul moduly, které v Drupalu 7 nepoužiji (Tagadelic a Cooliris), spustil jejich odinstalaci, abych se zbavil jejich záznamů v databázi, a poté jsem je smazal z diskového prostoru.

Nyní nastal čas vypnout všechny ostatní doplňkové moduly. Ovšem jen vypnout, žádná odinstalace. Jejich nastavení tak zůstane zachováno a po upgradu bude znovu dostupné. Moduly je třeba vypnout, aby se minimalizovaly obtíže spojené s upgradem. Z téhož důvodu jsem následně přepnul celý Drupal 6 do tématu vzhledu Garland a nastavil jej jako výchozí. Garland se totiž nachází i v Drupalu 7, nikoli tak další témata ze šestky.

Co všechno se bude mazat?

Do dočasné složky jsem si připravil balíčky s Drupalem 7 a potřebnými moduly. Kvůli potřebě převést data ze stávajícího modulu Image jsem si stáhl jeho verzi pro Drupal 7 (najdete ji po zobrazení všech release) a navíc modul Field Converter.

Ze stávající složky s Drupalem 6 jsem smazal vše, kromě složky se soubory (v mém případě files). Následně jsem nakopíroval soubory jádra pro Drupal 7. Ve složce sites/default bylo potřeba překopírovat soubor default.settings.php na setings.php a doplnit do něj údaje pro připojení k databázi. Ty jsem si samozřejmě předem poznamenal z původní verze souboru. Settings.php má v Drupalu 7 jinou syntaxi, takže nelze použít jeho původní podobu. Nastavení údajů pro připojení k databázi je v něm však vysvětleno, takže stačilo jen překopírovat vzor a vložit do něj skutečné údaje.

Update.php poprvé

Po ujištění, že jsem údaje do settings.php zadal správně, jsem do prohlížeče zadal adresu pracovní kopie webu a spustil proces update.php. Pokud by vám v tuto chvíli skočila bílá stránka, znamená to, že jste zřejmě špatně zadali údaje pro připojení k databázi a navíc udělali chybu v syntaxi. Proces update.php v Drupalu 7 zobrazuje seznam všech aktualizací, které musí vykonat. Odsouhlasil jsem je a počkal na dokončení.

V tuto chvíli byl Drupal 7 připraven s nastaveným tématem vzhledu Garland. Upgrade proběhl bez problémů, k dispozici byla všechna menu, kategorie a samozřejmě i obsahové uzly. V nich ale chybělo to hlavní - obrázky. Původní Image totiž nevyužíval políčka, ale vlastní připojování souborů s obrázky.

Jak převést data z Image pro Drupal 6 do obrázkového políčka Drupalu 7

Pokud bych nyní nakopíroval starý modul Image (nově nazývaný Image Legacy) do Drupalu 7, tak by vše dál fungovalo v původní podobě. Vzhledem k nejistému vývoji tohoto modulu, rozhodl jsem se maximálně spoléhat na funkcionalitu jádra Drupalu a provést konverzi. Vzhledem k náročnosti procesu ji doporučuji udělat ještě před nakopírováním dalších doplňkových modulů.

Do běžícího Drupalu 7 jsem nakopíroval balíček Image a modul Field Converter. V seznamu modulů jsem aktivoval v jádře moduly Image a File a z doplňkových pouze Image Legacy a Field Converter, tedy pouze dvě nové položky.

Na stránce admin/content/field_convert (odkaz na ni jsem nenašel v žádném menu) se zobrazí rozhraní pro konverzi z původního modulu Image na obrázková políčka Drupalu 7. Zapnul jsem volbu Image a konverzi spustil. Po jejím dokončení je možné původní modul Image Legacy vypnout, odinstalovat a smazat, stejně tak Field Convert. Nadále už nebudou potřeba.

Aby to nebylo tak jednoduché, při postupu v předchozím odstavci jsem se několikrát zasekl do té míry, že jsem musel celý postup, počínaje zprovozněním pracovní kopie webu opakovat. Důvody? Před konverzí jsem například zapnul XML Sitemap, který z neznámého důvodu způsoboval vytuhnutí konverze nebo různé jiné chyby. Dále jsem zjistil, že v databázi byly duplicitní záznamy směřující na stejný soubor. Konvertor si s tím neporadí. Proto doporučuji pomocí phpMyAdmina spustit následující příkaz, který vám zobrazí všechny duplicity v tabulce souborů v Drupalu 6. Ty byste měli následně ještě před upgradem vyřešit, například smazáním souvisejících uzlů nebo nahráním nových obrázků.

SELECT filepath, count( filepath ) AS cnt FROM files GROUP BY filepath HAVING cnt >1 ORDER BY cnt

Zbytek je pohoda

Konverze dat z původního modulu Image na obrázková políčka v Drupalu 7 byla asi největší zádrhel. Jinak vše ostatní probíhalo bez problémů. Po dokončení konverze jsem nakopíroval další původně používané moduly v jejich verzích pro Drupal 7, spustil jsem znovu update.php, moduly pozapínal a následně zkontroloval, případně upravil jejich nastavení.

V původním Drupalu 6 jsem používal modul Administration menu. Drupal 7 má vlastní černé administrační menu, to však není rozbalovací a moc komfortu nebo zrychlení přístupu do administračních částí nenabízí. Potěšilo mě, že upgrade na Drupal 7 toto výchozí menu automaticky nezapnul. S radostí jsem zjistil, že Administration menu pro Drupal 7 nabízí stejný vzhled jako menu z jádra doplněný právě o rozbalovací položky vedoucí do konkrétních částí administrace.

Na web jsem nasadil téma vzhledu Corolla a Garland jsem s poděkováním opět vypnul. Dále jsem na web doplnil modul Colorbox a v nastavení obrázkových políček jsem zvolil zobrazení náhledu obrázku v úvodníku a většího náhledu v detailu. Ten jsem ve stejném nastavení provázal na Colorbox, který zobrazí obrázek v původní velikosti.

Tip: Jak pracovat s obrázky a modulem Colorbox, včetně vytvoření galerie pomocí Views a Colorboxu najdete už brzy popsáno v nové české knize pro Drupal 7.

Po kontrole nastavení a nějakých drobných změnách jsem ještě smazal asi tři tisíce už nepotřebných souborů. Původní modul Image totiž pro každý obrázek ještě vytvářel soubory *.preview.* a *.thumbnail.*, které již nejsou potřeba. Drupal 7 totiž obsahuje zabudovaný ImageCache a zmenšeniny si vytváří v samostatné složce.

Takto upravený web jsem přesunul do původního umístění. Díky využití standardních políček z Drupalu 7 se otevírá možnost lepšího zpracování webu. Mé nejbližší plány jsou sjednocení uzlů obsahujících různé obrázky téhož programu. Původní modul Image umožňoval nahrávat jen jeden obrázek k jednomu uzlu. V případě obrázkových políček v Drupalu 7 vycházejících z CCK lze samozřejmě k jednomu uzlu připojit více obrázků.

Jak vypadá web po upgradu na Drupal 7 můžete vidět na adrese www.screenshots-archive.com. Celkový čas na tento upgrade byl i s opakováním kvůli špatnému postupu (viz zmínka v článku) asi šest hodin.

Tagy: 

Reklama

Komentáře

Vloudila se chybička, hned v nadpisu ;) Ale jinak díky za článek, časem se bude určitě hodit.

Postupoval jsem podle návodu, ale při prvním update.php jsem se po chvilce zasekl na této hlášce:

An AJAX HTTP error occurred. HTTP Result Code: 500 Debugging information follows. Path: http://d7.kulturistika.com/update.php?id=4365&op=do StatusText: Service unavailable (with message) ResponseText: Recoverable fatal error: Argument 2 passed to SelectQuery::fields() must be an array, null given, called in /home/www/xxxxx/d7/includes/entity.inc on line 284 and defined in SelectQuery->fields() (line 1320 of /home/www/xxxxx/d7/includes/database/select.inc).

 

Co by mi mohlo pomoct?

A ve finále další chyba, na kterou už jsem na internetu odpověď nenašel:

 

An AJAX HTTP error occurred. HTTP Result Code: 200 Debugging information follows. Path: http://d7.xxxxx/update.php?op=selection&token=o0hzVOphZk2Yr4k0UG_CYS7zr_... StatusText: OK ResponseText: Fatal error: require_once() [function.require]: Failed opening required './field/field.install' (include_path='.:/usr/share/php:/usr/share/pear') in /home/www/xxxxx/d7/modules/image/image.install on line 343

Přidat komentář