Обновления базы данных после получения обновлений кода для модулей
Я обновил несколько модулей в своей локальной среде разработки, а затем внес изменения в код с помощью git.
На моем тестовом сайте я вытащил код и запустил drush updb
, но он показывает, что ничего не нужно обновлять и что обновленные мной модули теперь актуальны. В прошлом, каждый раз, когда я выполнял обновления, я исходил из предположения, что в нем есть компонент обновления базы данных, и всякий раз, когда я запускал drush updb
, он принимал код, который был просто реализовано с помощью git и запустите обновление. Не уверен, почему на этот раз все по-другому, может кто-нибудь объяснить? Я пропустил команду? Если обновления базы данных не требуются, я могу продолжать, зная, что обновления действительно завершены?
Если обновления базы данных не требуются для всех обновлений модулей, может ли кто-нибудь привести пример того, когда обновления касаются и не касаются базы данных?
Редактировать: Примером одного из таких обновлений был токен полей адресов или модуль статических карт Google.
1 answers
Что заставляет вас думать, что для любого из обновленных модулей часть фактических обновлений включала некоторое обновление базы данных, которое необходимо выполнить? Другими словами: существует (множество) случаев, когда при обновлении какого-либо модуля нет связанных обновлений базы данных, которые включены в такое обновление модуля.
Из "Написание файлов .install (Drupal 7.x)", в разделе "Обновления модуля с помощью hook_update_N":
Обновление вашего модуля, например обновление вашей схемы, может быть сделано с помощью функций hook_update_N. Страница API для этого находится по адресу: функция hook_update_N.
Предположим, вы добавили новый столбец под названием "newcol" в mytable1. Во-первых, обязательно обновите структуру схемы в mymodule_schema(), чтобы вновь созданные таблицы получали новый столбец. Затем добавьте функцию обновления в mymodule.install...
Взгляните на эту часть файла .install об обновлении базы данных для модуля Правил, которая выглядит следующим образом итак:
/**
* Creates a flag that enables a permission for using components.
*/
function rules_update_7209() {
// Create a access exposed flag column.
db_add_field('rules_config', 'access_exposed', array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'size' => 'tiny',
'description' => 'Whether to use a permission to control access for using components.',
));
}
PS: Справедливо сказать, что обновления базы данных не требуются, если в схему не внесены изменения.