web-dev-qa-db-ja.com

hook_install()で必要な長いランタイム更新をどのように処理しますか?

一連の hook_update_N() sを含む新しいモジュールがあります。モジュールのインストール中に、モジュールスキーマ値がhook_update_N() sが実際に実行されていないときに定義されたhook_update_N()の最高値に設定されることを知らずにこれらを書きました。

いくつかのhook_update_N()は、データベースの変更が長いため、$sandbox(バッチAPI)を利用しています。私が知る限り、batch APIはhook_install()でサポートされていないようです。

モジュールのインストール/デプロイメント中にこれらを実行するための私のオプションは何ですか?

2
Justin

私の提案は、インストール時に自動化しないことです。管理者がバッチジョブを起動できるページを提供します。

しかし、それを絶対に自動化する必要がある場合、そのような原始的なものはありますが、私は提案があります。

hook_init() {
  $run_batch = variable_get('NOT_INSTALLED_YET', FALSE);
  if ($run_batch) {
    // Redirect to batch launch, or possible just set an approprite message.
  }
}

hook_install() {
  variable_set('NOT_INSTALLED_YET', TRUE);
}
2
Letharion