É possível executar a função de atualização de um único módulo via drush? Eu posso ver o drush updatedb
que não leva um nome de módulo como argumento e executa todas as atualizações disponíveis. Depois, há drush pm-update
também que verifica se há novos arquivos. a documentação diz:
(igual a pm-updatecode + updatedb)
Isso significa que se eu executar drush pm-update
todas as atualizações disponíveis (mais recentes saídas de função de atualização) serão executadas ? Existe uma maneira de (db) atualizar apenas exatamente um módulo?
Respostas:
Não, você não pode.
Se você deseja atualizar cada módulo por conta própria, atualize apenas os arquivos de um único módulo e execute o updateb.
fonte
drush dl
(você provavelmente vai querer apagar o antigo primeiro módulo para que você não manter em torno arquivos mais antigos não destinados para a nova versão!)No Drush 5.7, você pode executar o comando
drush pm-update --no-core module-name
. O Drush fará backup automaticamente do módulo atual, fará o download da nova versão e solicitará que você atualize o banco de dados.fonte
Se você deseja executar apenas uma atualização, pode executar
drush eval foo_update_33()
, por exemplo. Na prática, é um pouco mais complexo que isso, pois você precisa carregar o arquivo .install, mas não muito.Você também pode tentar a solução @macaleaa:
drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'
fonte
function devel_update_7000
é aquela com o número mais baixo e será executada primeiro, entãofunction devel_update_7001
, etc.drush php-eval 'module_load_install('file_entity');file_entity_update_7211();'
nem
drush up someproject
, nemdrush upc someproject
parecem parecem atualizar apenas osomeproject
módulo. Uma maneira diferente da que você deseja é:Aqui está a discussão de um tópico semelhante no Drupal.org. Cuidar !
fonte
drush up someproject
FUNCIONA, MAS, infelizmente, verifica TODAS as atualizações disponíveis para os módulos ativados por padrão também (o que não seria necessário), escreve "Atualização disponível" para alguns deles, mas apenas atualiza o projeto específico. Aqui está uma captura de tela: i.imgur.com/TDDmB.png . Como você pode ver, várias atualizações estão disponíveis, mas apenas o xmlsitemap é atualizado usandodrush up xmlsitemap
.Estou usando o Drush 5.9, e posso atualizar um único módulo com sucesso com este comando:
Então, por exemplo, para atualizar o módulo 'devel':
fonte
Eu acredito que isso agora é possível com o Drush, usando
up
:fonte
Eu tive uma situação em que uma tabela criada por uma função de atualização (
MYMODULE_update_7101
), mas essa tabela estava sendo acessada em código em algum lugar em cada cache limpo e quase todas as chamadas drush (estava basicamente recebendo os nomes dos tipos de entidade para todos os menus e qualquer outra coisa) outro). Correrdrush updatedb
estava emMYMODULE_update_7101
terceiro lugar em vez de primeiro.Tentei a solução sugerida por @macaleaa e @moshe weitzman de execução:
antes da execução
drush updatedb
, mas isso não ajudou - a execução do drush falhou porqueupdatedb
tentou executar novamenteMYMODULE_update_7101()
e errou, dizendo que a tabela já existia. Basicamente, o código acima executou a atualização, mas não deixou sua marca no sistema em que a atualização foi executada. Presumivelmente, há várias outras coisasupdate.php
a serem feitas após a execução de cada atualização para armazenar o número da versão mais recente do módulo no banco de dados, etc.Analisei
update.php
como ele realmente executa cada função de atualização e o que faz depois, procurando uma função para chamar que chamaria a função de atualização e também fazer todas as outras coisas. Acabei chegando a isso:Que eu realmente corri com drush:
Ele executou a atualização, não há problema, mas a versão 7101 do MYMODULE ainda aparecia na lista de atualizações quando eu corria
updatedb
, apesar de executada sem erros e tudo parecia bom na inspeção do site.Um pouco hacky e 6 anos atrasado, mas tudo está bem quando acaba bem?
fonte