drush updatedb для одного модуля

Можно ли выполнить функцию обновления одного модуля через drush? Я могу видеть drush updatedb , который не принимает имя модуля как аргумент и запускает все доступные обновления. Затем есть drush pm-update , который также проверяет наличие новых файлов. документация говорит:

  

(то же, что и pm-updatecode + updatedb)

Означает ли это, что если я запустил drush pm-update , все доступные (новые версии update_function) будут обновлены? Есть ли способ только (db) обновить ровно один модуль?

25 голосов | спросил nonsenz 19 Maypm11 2011, 12:14:45

7 ответов


8

Нет, вы не можете.

Если вы хотите обновить каждый модуль самостоятельно, обновите только файлы одного модуля, а затем запустите updatedb.

ответил Berdir 19 Maypm11 2011, 12:21:44
22

В Drush 5.7 вы можете запустить команду drush pm-update --no-core module-name . Drush автоматически резервирует текущий модуль, загружает новую версию и предлагает вам обновить базу данных.

ответил ahimsauzi 14 MaramThu, 14 Mar 2013 01:25:05 +04002013-03-14T01:25:05+04:0001 2013, 01:25:05
8

Если вы хотите запустить только одно обновление, вы можете запустить, например, drush eval foo_update_33 () . На практике это немного сложнее, чем при загрузке файла .install, но не так много.

Вы также можете попробовать решение @macaleaa:

drush php-eval 'module_load_install (' my_module '); my_module_update_7XXX ();

ответил moshe weitzman 5 J000000Tuesday11 2011, 07:48:34
5

ни drush up someproject , ни drush upc someproject , похоже, обновляют только модуль someproject . Другой способ сделать это:

  drush dl someproject #use - выберите вариант для запроса версии модуля
                     # это перезапишет файлы вашего exising модуля
                     #backup ваши файлы модулей с помощью --backup, самостоятельно, используйте VCS для возврата
drush updb #run доступные сценарии обновления базы данных
 

Здесь обсуждается аналогичная тема на Drupal.org. Будьте осторожны!

ответил myselfhimself 19 J0000006Europe/Moscow 2012, 13:44:09
4

Я использую Drush 5.9, & amp; может успешно обновить один модуль с помощью этой команды:

  drush dl * project *
 

Итак, например, чтобы обновить модуль devel:

  развернуть
 
ответил Rod 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 18 Sep 2013 14:13:37 +0400 2013, 14:13:37
1

Я считаю, что теперь это возможно с Drush, используя up :

  drush up module_name
 
ответил zgreen 18 +03002017-10-18T01:12:33+03:00312017bEurope/MoscowWed, 18 Oct 2017 01:12:33 +0300 2017, 01:12:33
0

У меня была ситуация, когда таблица была создана с помощью функции обновления ( MYMODULE_update_7101 ), но к этой таблице обращались в коде где-то в каждом кэше и почти каждый разворачиваемый вызов (это было в основном получение имена типов сущностей для всех меню и всего остального). Запустив drush updatedb , вместо первого был запущен MYMODULE_update_7101 .

Я попробовал решение, предложенное @macaleaa и @moshe weitzman:

  drush php-eval 'module_load_install (' MYMODULE '); MYMODULE_update_7101 ();'
 

перед запуском drush updatedb , но это не помогло - запуск drush завершился неудачно, потому что updatedb снова попытался запустить MYMODULE_update_7101 () и ошибка, заявив, что таблица уже существует. В основном, приведенный выше код запустил обновление, но не оставил его в системе, что обновление было выполнено. Предположительно, после запуска каждого обновления необходимо сохранить целую кучу других вещей, которые будут выполняться после запуска каждого обновления, чтобы сохранить последний номер версии для модуля в db и т. Д.

Я прошел через update.php , чтобы узнать, как он фактически запускает каждую функцию обновления и что она делает после, ищет функцию для вызова, которая вызовет функцию обновления, а также сделает все остальное , Я добрался до этого:

  include_once DRUPAL_ROOT. "/includes/update.inc";
$ c ["results"] ["# abort"] = array ();
update_do_one ("MYMODULE", 7101, array (), $ c);
 

Что я на самом деле бежал с drush:

  drush eval 'include_once DRUPAL_ROOT. "/includes/update.inc"; $ c ["results"] ["# abort"] = array (); update_do_one («MYMODULE», 7101, array (), $ c);
 

Он запускал обновление, без проблем, но тогда MYMODULE-версия 7101 все еще отображалась в списке обновлений, когда я запускал updatedb , ALTHOUGH он работал без ошибок, и все выглядело хорошо при проверке сайта .

Немного взломанный и 6 лет спустя, но все хорошо, что хорошо заканчивается?

ответил nerdlinger 21 FebruaryEurope/MoscowbWed, 21 Feb 2018 20:49:18 +0300000000pmWed, 21 Feb 2018 20:49:18 +030018 2018, 20:49:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132