Para composerizar usamos [composerize-drupal](https://github.com/grasmash/composerize-drupal). Si no lo tenemos instalado ya, lo podemos instalar haciendo un:

    #!bash

    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:

    #!bash

    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:

    #!bash

    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`:

    #!json

    "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:

    #!mysql

    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:

    #!bash

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



####