Klidně to přiznám. Mám pod palcem několik instalací Drupalu 8, které běží na klasickém webhostingu dostupném jen a pouze s FTP. Provádět zde něco s Composerem je tedy nemyslitelné. Ano, šlo by to řešit kopií webu jinde a vůbec všemi těmi správnými agilními vývojářskými technikami, ale… Znáte to.
Druhá věc je historická. Na začátku mi prostě nepřipadalo, že by Drupal 8 s Composerem fungoval zrovna ideálně. Také moje pracovní postupy to musely nějak pojmout, což chce čas.
Každopádně se mezi těmi projekty, které mám i občas stále stavím tou klasickou starou Drupal metodou, objeví možnost přechodu na vlastní virtuální server a také potřeba instaloval moduly vyžadující použití Composeru.
Kombinovat klasickou instalaci Drupalu s Composerem není úplně dobrý nápad. Nainstalujete nějaké knihovny a moduly přes Composer, pak ale spustíte ruční instalaci či aktualizaci přes drush a řadu věcí si přepíšete. Web pak dost možná přestane fungovat.
Potřebujete-li tedy v Drupalu 8 Composer, je potřeba na něj u daného projektu přejít kompletně. Údržba webu s tímto nástrojem je docela snadná, když vše správně nastavíte. Z nějakého důvodu se mi to správné řešení nikdy ručně nepodařilo na poprvé. Vždy jsem něco zapomněl nastavit v composer.json, něco jsem blbě překopíroval, byly špatné závislosti u instalovaných věcí…
Řešením je plugin Composerize Drupal
Před nějakou dobou jsem ale objevil zhruba rok starý projekt s názvem Composerize Drupal. Jedná se o plugin pro Composer, který převede Drupal z klasické instalace na projekt spravovaný právě přes Composer. Po několika použitích mohu konstatovat, že tak činí spolehlivě.
Co vlastně tento plugin provádí? Odstraní mnohdy zabordelený původní composer.json a composer.lock. Vytvoří nové v zadané složce, nastaví závislost projektu na jádře Drupalu, připraví oddělení dodatečně instalovaných modulů do složky modules/contrib místo přímého umístění rovnou v modules, upraví .gitignore a spustí aktualizaci pro nakopírování projektu v aktuální verzi.
Instalaci a spuštění Composerize Drupal jistě zvládnete. Jsou to dva příkazy, které najdete na stránce projektu:
composer global require grasmash/composerize-drupal
composer composerize-drupal --composer-root=[repo-root] --drupal-root=[drupal-root]
Změny provádím tak, že stávající instalaci Drupalu komplet celou překopíruju do podsložky web. Poté spustím Composerize Drupal s tímto nastavením:
composer composerize-drupal --composer-root=. --drupal-root=./web
Úplně všechno za vás plugin neudělá, takže složku s projektem je ještě potřeba uklidit. V podsložce web smažu složku vendor, která tam zbyla z původní instalace Drupalu. Nově je díky změně struktury složek o patro výše.
Překopíruju moduly ze složky modules do podsložky modules/contrib. Následně pro všechny spustím jejich instalaci přes composer (tj. composer require drupal/nazev_modulu), aby se mi naplnili do konfiguračního souboru composer.json.
Protože se mi tím vším mohly do projektu dostat nové verze jádra Drupalu i modulů, je ještě potřeba provést aktualizaci databáze (drush updatedb) a vymazání cache (drush cr).
Pozor, Composerize Drupal, resp. Composer jako takový, přepíše robots.txt a .htaccess. Buď je vraťte ze zálohy (určitě si ji před takovým zásahem uděláte) nebo je znovu upravte dle svých potřeb.
Asi by se toho dalo automatizovat více, každopádně tento postup mi funguje a na jeho konci je bez problémů fungující Drupal spravovaný přes Composer. Vyzkoušejte to také.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář