Czy można wykonać funkcję aktualizacji pojedynczego modułu poprzez drush? Widzę, drush updatedb
który nie przyjmuje nazwy modułu jako argumentu i uruchamia wszystkie dostępne aktualizacje. Następnie jest drush pm-update
sprawdzane, czy są nowe pliki. dokumentacja mówi:
(to samo co pm-updatecode + updatedb)
Czy to oznacza, że jeśli uruchomię drush pm-update
każdą dostępną (nowsze wersje funkcji_wyjścia) aktualizację zostanie wykonana? Czy istnieje sposób na aktualizację tylko (db) dokładnie jednego modułu?
Odpowiedzi:
Nie możesz
Jeśli chcesz zaktualizować każdy moduł osobno, zaktualizuj tylko pliki jednego modułu, a następnie uruchom zaktualizowaneb.
źródło
drush dl
(prawdopodobnie najpierw chcesz usunąć stary moduł, aby nie trzymać starszych plików nieprzeznaczonych dla nowej wersji!)W Drush 5.7 możesz uruchomić polecenie
drush pm-update --no-core module-name
. Drush automatycznie wykona kopię zapasową bieżącego modułu, pobierze nową wersję i poprosi o aktualizację bazy danych.źródło
Jeśli chcesz uruchomić tylko jedną aktualizację, możesz
drush eval foo_update_33()
na przykład uruchomić . W praktyce jest to trochę bardziej skomplikowane, ponieważ musisz załadować plik .install, ale nie za dużo.Możesz także wypróbować rozwiązanie @macaleaa:
drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'
źródło
function devel_update_7000
jest to ten o najniższym numerze i zostanie najpierw wykonanyfunction devel_update_7001
, itd.drush php-eval 'module_load_install('file_entity');file_entity_update_7211();'
ani
drush up someproject
niedrush upc someproject
wydają się aktualizować tylkosomeproject
modułu. Innym sposobem na osiągnięcie tego jest:Oto dyskusja na podobny temat na Drupal.org. Dbać !
źródło
drush up someproject
DZIAŁA, ALE niestety domyślnie sprawdza WSZYSTKIE dostępne aktualizacje dla włączonych modułów (które nie byłyby potrzebne), pisze „Aktualizacja dostępna” dla niektórych z nich, ale TYLKO aktualizuje konkretny projekt. Oto zrzut ekranu: i.imgur.com/TDDmB.png . Jak widać, dostępnych jest wiele aktualizacji, ale tylko xmlsitemap jest aktualizowany za pomocądrush up xmlsitemap
.Korzystam z Drush 5.9 i mogę pomyślnie zaktualizować pojedynczy moduł za pomocą tego polecenia:
Na przykład, aby zaktualizować moduł „devel”:
źródło
Wierzę, że jest to teraz możliwe dzięki Drush, używając
up
:źródło
Miałem sytuację, w której tabela utworzona przez funkcję aktualizacji (
MYMODULE_update_7101
), ale do tej tabeli dostęp był gdzieś w kodzie w każdej pamięci podręcznej wyczyszczonej i prawie przy każdym wywołaniu drush (w zasadzie otrzymywał nazwy typów jednostek dla wszystkich menu i cokolwiek innego) jeszcze). Bieganiedrush updatedb
działałoMYMODULE_update_7101
trzecie zamiast pierwszego.Wypróbowałem rozwiązanie sugerowane przez @macaleaa i @moshe weitzman dotyczące uruchamiania:
przed uruchomieniem
drush updatedb
, ale to nie pomogło - uruchomienie drush nie powiodło się, ponieważupdatedb
próbowałem ponownie uruchomićMYMODULE_update_7101()
i zignorowałem, mówiąc, że tabela już istnieje. Zasadniczo powyższy kod uruchomił aktualizację, ale nie pozostawił znaku w systemie, że aktualizacja została uruchomiona. Przypuszczalnie istnieje wiele innych rzeczy,update.php
które trzeba zrobić po uruchomieniu każdej aktualizacji, aby zapisać najnowszy numer wersji modułu w db itp.Przeszedłem,
update.php
aby zobaczyć, jak faktycznie działa każda funkcja aktualizacji i co robi później, szukając funkcji do wywołania, która wywołałaby funkcję aktualizacji, a także wykonała wszystkie inne czynności. Skończyło się na tym, że:Które faktycznie prowadziłem z drush:
Uruchomiłem aktualizację, nie ma problemu, ale wtedy wersja 7101 MYMODULE wciąż pojawiała się na liście aktualizacji, kiedy uruchomiłem
updatedb
, mimo że działała bez błędów i wszystko wyglądało dobrze podczas inspekcji witryny.Trochę zuchwały i spóźniony o 6 lat, ale czy wszystko dobrze się kończy?
źródło