web-dev-qa-db-ja.com

Drupalがモジュールの更新中にメンテナンスモードになるのは正常ですか?

hook_update_N()およびhook_update_N(&$sandbox)更新フックを含む.installファイルを使用してカスタムモジュールを作成しました。

これらは、既存のノードのコレクションを更新するために使用されます。

drush updbを実行すると、サイトは自動的にメンテナンスモードになり(匿名の要求は503を取得します)、更新が成功すると、サイトはオンラインに戻ります。すべてそれ自体で。

私はこの状況についてウェブ上でリソースを見つけることができませんでした。正常ですか?この動作を無効にする方法はありますか?

3
atwixtor

はい、それは正常に見えます。 Drush's UpdateDBCommands::updateBatch は、更新の処理を担当し、次の内容を含みます。

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();

コードは、バッチを処理する前に意図的にメンテナンスモードをtrueに設定し、完了したら元の状態に戻します。

ランニング drush help updbは、次のオプションをリストします。

  • --cache-clear[=CACHE-CLEAR]完了時にキャッシュをクリアします。 [デフォルト: "true"]
  • --entity-updates更新フックの最後にエンティティスキーマの自動更新を実行します。
  • --post-updates[=POST-UPDATES] hook_update_nおよびエンティティの更新後にポスト更新を実行します。 [default: "true"]
  • --no-cache-clear否定--cache-clearオプション。
  • --no-post-updates否定--post-updatesオプション。

したがって、この動作を無効にする明白な方法はないようです。しかし、データベースを更新している場合は、人々が同時にサイトにアクセスできるようにしたくないでしょう。そのための良い説明があります here

4
Clive