Il semaforo scomparso di Drupal

Fonte http://www.ziodrupal.net


E' possibile che dopo l'aggiornamento alla nuova release 6.16 di Drupal vi compiano alcuni messaggi di warning relativi ad un tabella “semaphore” mancante. Ecco come correggere il problema.

Non si è ben capito da cosa derivi questa non creazione della tabella semaphore del modulo system, ma alcuni utenti in svariate mailing list e forum dedicati al CMS Drupal hanno segnalato righe simili a questa apparsa in un thread della mailing list support@drupal.org:

1.user warning: Table 'redacted_org_-_drupal.semaphore' doesn't exist query: lock_may_be_available /* admin : lock_may_be_available */ SELECT expire, value FROM semaphore WHERE name = 'menu_rebuild' in /var/www/html/drupal/includes/lock.inc on line 154.
2.user warning: Table 'redacted_org_-_drupal.semaphore' doesn't exist query: lock_may_be_available /* admin : lock_may_be_available */ SELECT expire, value FROM semaphore WHERE name = 'menu_rebuild' in /var/www/html/drupal/includes/lock.inc on line 154.

Per risolvere questo problema si può agire in due modi: il primo è rilanciare l'update.php, selezionando l'update numero 6054 del modulo system nella seconda pagina di questo script. Quasi sicuramente nella scherma di riassunto dell'update.php vi verranno mostrati degli errori di MySQL sul tentativo di cancellazione (DROP) di indici e chiavi non esistenti; non ve ne preoccupate perché è corretto (voi state rieseguendo l'update 6054 e la cancellazione avviene nell'update numero 6055 che è già stato eseguito la prima volta che avete lanciato l'update.php). Per sicurezza rieseguite ancora l'update.php senza modificare nessun valore e controllare di non avere a video delle segnalazioni di errori.

Il secondo modo è quello di creare la tabella direttamente via SQL tramite un sistema di accesso al database come phpMyAdmin. La query da eseguire è :

CREATE TABLE semaphore ( `name` VARCHAR(255) NOT NULL DEFAULT '', `value` VARCHAR(255) NOT NULL DEFAULT '', `expire` DOUBLE NOT NULL, PRIMARY KEY (name), INDEX expire (expire) ) /*!40100 DEFAULT CHARACTER SET UTF8 */

Attenzione: se state eseguendo questa query via drush ricordatevi di inserire un carattere di escape (\) davanti al !40100, altrimenti riceverete questo errore:

-bash: !40100: event not found