Para composerizar usamos composerize-drupal. Si no lo tenemos instalado ya, lo podemos instalar haciendo un:

1
composer global require grasmash/composerize-drupal

Para composerizar un drupal (e instalarle drush via composer) hemos de correr el paquete anterior en la root del drupal:

1
2
3
4
cd /var/www/path-al-drupal/public_html
composer composerize-drupal
composer require drush/drush
drush updb

Problemas comunes

Composer no encuentra las actualizaciones de drupal

Comprobamos package.json y miramos si 'drupal/core' est谩 bajo replace y si es as铆 lo movemos bajo require. Borramos vendor y composer.lock y probamos a hacer un composer update.

PHP fatal error relacionado con ClassFinderInterface.php

El error ser铆a:

1
PHP Fatal error:  require(): Failed opening required '/var/www/{dominio}/public_html/vendor/composer/../doctrine/common/lib/Doctrine/Common/Reflection/ClassFinderInterface.php'

El problema es que doctrine movi贸 reflection de doctrine/common a doctrine/reflection. En algunos sitios dicen que es un problema de cach茅 de PHP y que hay que limpiarla o reiniciar PHP como mejor soluci贸n. Hacemos un composer/update tras a帽adir a composer.json:

1
2
3
4
"conflict" : {
    "drupal/drupal" : "*",
    "doctrine/common" : ">2.8"
}

Problemas con pathauto

Puede haber problemas con pathauto porque no existan sus tablas en la base de datos (si lo detectamos haciendo un drush updb puede ser un run error 8803, para saber si el error es este hay que visitar la web y ver los logs de apache, logs de drush updb no dan much m谩s detalle). Empezamos por comprobar la versi贸n de pathauto: si tenemos una versi贸n inferior a la 1.5, lo desinstalamos y actualizamos a una versi贸n reciente (igual o superior a la 1.6). Tras eso creamos manualmente las bases de datos:

1
2
3
CREATE TABLE `path_alias` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `revision_id` INT(10) UNSIGNED DEFAULT NULL, `uuid` VARCHAR(128) CHARACTER SET ASCII NOT NULL, `langcode` VARCHAR(12) CHARACTER SET ASCII NOT NULL, `path` VARCHAR(255) DEFAULT NULL, `alias` VARCHAR(255) DEFAULT NULL, `status` TINYINT(4) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `path_alias_field__uuid__value` (`uuid`), UNIQUE KEY `path_alias__revision_id` (`revision_id`), KEY `path_alias__status` (`status`,`id`), KEY `path_alias__alias_langcode_id_status` (`alias`(191),`langcode`,`id`,`status`), KEY `path_alias__path_langcode_id_status` (`path`(191),`langcode`,`id`,`status`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='The base table for path_alias entities.';

CREATE TABLE `path_alias_revision` ( `id` int(10) unsigned NOT NULL, `revision_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `langcode` varchar(12) CHARACTER SET ascii NOT NULL, `path` varchar(255) DEFAULT NULL, `alias` varchar(255) DEFAULT NULL, `status` tinyint(4) NOT NULL, `revision_default` tinyint(4) DEFAULT NULL, PRIMARY KEY (`revision_id`), KEY `path_alias__id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='The revision table for path_alias entities.';

Entradas hu茅ranas en system.schema

A veces al desinstalar m贸dulos, 茅stos se quitan correctamente pero quedan entradas en el schema del sistema, y hay que borrarlas para que el sistema no se confunda y piense que todav铆a est谩n instalados ( https://www.drupal.org/node/3137656). Se pueden borrar con drush:

1
drush php-eval "\Drupal::keyValue('system.schema')->delete('my_already_removed_module');"