Os ganchos "post_update" que foram executados são armazenados no banco de dados, na key_value
tabela, post_update
coleção, mas os dados são serializados e difíceis de atualizar diretamente.
Eu usei alguns detalhes da resposta de @ kiamlaluno para criar um script drush que você pode usar para redefinir um único gancho. Aqui está uma versão básica (a versão mais longa está aqui ):
#!/usr/bin/env drush
$key_value = \Drupal::keyValue('post_update');
$update_list = $key_value->get('existing_updates');
$choice = drush_choice($update_list, dt('Which post_update hook do you want to reset?'));
if ($choice) {
$removed_el = $update_list[$choice];
unset($update_list[$choice]);
$key_value->set('existing_updates', $update_list);
drush_print("$removed_el was reset");
} else {
drush_print("Reset was cancelled");
}
E aqui está um exemplo de como é quando você o executa na linha de comando:
./scripts/reset_hook_post_update_NAME.drush
Which post_update hook do you want to reset?
[0] : Cancel
[1] : system_post_update_add_region_to_entity_displays
[2] : system_post_update_hashes_clear_cache
[3] : system_post_update_recalculate_configuration_entity_dependencies
[4] : system_post_update_timestamp_plugins
[5] : my_module_post_update_example_hook
# The script pauses for user input.
5
my_module_post_update_example_hook was reset
Aqui está um exemplo que você pode usar na linha de comando com drush php-eval:
Quando você executar novamente o drush updatedb, verá seu post_update_hook aguardando a execução.
fonte
drush php:eval 'command'
UpdateRegistry::getPendingUpdateFunctions()
contém o seguinte código. Veja o que o comentário diz.UpdateRegistry :: $ updateType está definido como
'post_update'
.$this->keyValue
é definido deUpdateRegistryFactory::create()
com o valor de$this->container->get('keyvalue')->get('post_update')
.O código de procedimento equivalente para obter essa coleção de valores-chave é o seguinte.
Defina existir_updates para uma matriz vazia e o Drupal pensará que nenhum dos retornos de chamada pós-atualização foram chamados.
Remova o nome do retorno de chamada da chave existente_updates desse valor-chave e o Drupal pensará que o retorno de chamada pós-atualização ainda não foi invocado.
fonte
Ligue de dentro
hook_update_n()
e faça o que estava fazendo antes.fonte