web-dev-qa-db-fra.com

Est-il normal que Drupal passe en mode maintenance lors d'une mise à jour du module?

J'ai créé un module personnalisé avec un fichier .install, Qui comprend des crochets de mise à jour hook_update_N() et hook_update_N(&$sandbox).

Ils sont utilisés pour mettre à jour une collection de nœuds existants.

Chaque fois que j'exécute drush updb, Le site passe automatiquement en mode maintenance (les demandes anonymes obtiennent un 503), et si la mise à jour réussit, le site revient en ligne. Tout seul.

Je n'ai trouvé aucune ressource sur le Web à propos de cette situation. Est-ce normal? Existe-t-il un moyen de désactiver ce comportement?

3
atwixtor

Cela semble normal, oui. Drush's UpdateDBCommands::updateBatch , qui est responsable du traitement des mises à jour, contient ceci:

batch_set($batch);

// See updateFinished() for the restore of maint mode.
$this->maintenanceModeOriginalState = \Drupal::service('state')->get('system.maintenance_mode');
\Drupal::service('state')->set('system.maintenance_mode', true);
drush_backend_batch_process();

Le code définit délibérément le mode de maintenance sur true avant de traiter le lot, puis restaure l'état d'origine lorsqu'il est terminé.

Fonctionnement drush help updb répertorie les options suivantes:

  • --cache-clear[=CACHE-CLEAR] Vider les caches à la fin. [par défaut: "vrai"]
  • --entity-updates Exécutez les mises à jour automatiques du schéma d'entité à la fin de tous les hooks de mise à jour.
  • --post-updates[=POST-UPDATES] Exécutez les mises à jour après hook_update_n et les mises à jour d'entité. [default: "true"]
  • --no-cache-clear Nier --cache-clear option.
  • --no-post-updates Nier --post-updates option.

Il ne semble donc pas y avoir de moyen évident pour désactiver le comportement. Mais si vous mettez à jour la base de données, vous ne voulez probablement pas que les gens puissent accéder au site en même temps. Il y a une bonne explication à cela ici .

4
Clive