После обновления ядра и модулей до последней версии, перестали редактироваться материалы на сайте. Редактирую поля материала, но после сохранения никаких изменений не вижу. Ошибки не логируются. Очистка кэша из друпал возможно не срабатывает, после того как очистил таблицы кэшей в БД, показывается актуальная страница с изменёнными полями. В настройках друпал кэширование не включено. Куда копать, что делать? Те, кто занимался обновлением, не сделали никаких бэкапов, ну и после этого надобавляли новые материалы на сайт, поэтому откатиться нет возможности.
Комментарии
Может доп модули кеша стоят, типа Boost и тд. Проверьте какие модули установлены.
Зря вручную что-то в бд чистили.
Может спросить у них? Как так или типо того.
нет, модулей для работы с кэшами, нету. Пробовал выборочно отключать разные модули, не помогает.
как это может повлиять? Только таблицы cache_* чистил:
TRUNCATE TABLE `cache`;
Перенёс сайт на свой хостинг и экспериментирую. Идей как можно выявить причину уже не осталось.
Аналогичная ситуация, не только с материалами, например, меняю некоторые настройки, но они не применяются:
например тут
/admin/config/development/logging
изменения появятся только если очистить кэши из БД. Из друпала чистить кэш бесполезно /admin/config/development/performance.
https://www.drupal.org/project/admin_menu не установлен? Там можно все кеши почистить одним кликом.
Еще вариант - drush поставить, попробовать им почистить.
Еще вариант уже предлагали выше - дергать тех, кто обновлял, может быть какие-то ошибки были, что-то натворили и молчат.
Кроме того, можно в саппорт хостинга написать, может быть у них свои бекапы есть.
В БД была битая таблица cache_rules. Выдавала ошибку: #1146 - Table 'infurs_db.cache_rules' doesn't exist. По сути отсутствовала таблица. Создал пустую таблицу cache_rules, но проблему с редактированием материалов это не решило. После редактирования всё равно отображаются старые данные.
`cid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Primary Key: Unique cache ID.',
`data` longblob COMMENT 'A collection of data to cache.',
`expire` INT(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry should expire, or 0 for never.',
`created` INT(11) NOT NULL DEFAULT '0' COMMENT 'A Unix timestamp indicating when the cache entry was created.',
`serialized` SMALLINT(6) NOT NULL DEFAULT '0' COMMENT 'A flag to indicate whether content is serialized (1) or not (0).',
PRIMARY KEY (`cid`),
KEY `expire` (`expire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Cache table for the rules engine to store configured items.';
Да, там сюрприз у хостера, бэкапы не делались из-за ошибки с таблицей cache_rules.
Ну не чистить же в ручную кэши после каждого действия на сайте. Не выход.
Нашёл реализацию модуля очищающего кэш каждой страницы
http://www.sooource.net/drupal-ochistka-kesha-obnovlennoy-nody
<?php /**
* Реализация hook_node_submit.
*/
function sn_cache_node_submit($node, $form, &$form_state) {
if ($form_state['values']['clear_cache_for_this_page']===1) :
cache_clear_all('field:node:' . $node->nid, 'cache_field');
drupal_set_message('Очищен кэш для страницы <em class="placeholder">'. $node->title. '</em>.');
endif;
} /**
* Реализация hook_form_FORM_ID_alter.
*/
function sn_cache_form_node_form_alter(&$form, &$form_state, $form_id) {
if (isset($form['#node_edit_form']) && $form['#node_edit_form'] === TRUE) {
$form['options']['clear_cache_for_this_page'] = array(
'#type' => 'checkbox',
'#title' => "Очистить кэш для этой ноды",
'#default_value' => 1,
'#access' => user_access('administer nodes') ? TRUE : FALSE,
);
}
?>}
После редактирования материала, отображается сообщение что кэш очищен, но всё равно отображается необновлённая страница. А если в ручную удаляю кэш поля конкретного материала, то показывается актуальная страница.
Почему cache_clear_all не срабатывает?
Попробовал установить модуль Hook Post Action, для того чтобы использовать хуки: hook_node_postsave, hook_node_postupdate
И в них очищать кэш, но это тоже не помогает.
<?php
function sn_cache_node_presave($node) {
//cache_clear_all('field:node:' . $node->nid, 'cache_field');
cache_clear_all('*', 'cache_field', TRUE);
drupal_set_message('Очищен кэш для страницы <em class="placeholder">'. $node->title. '</em>.');
}
?>
SQL-запросом тоже не срабатывает.
<?php
function sn_cache_node_presave($node) {
if(!file_exists('./includes/bootstrap.inc')){
print "exit";
exit();
}
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
db_query("DELETE FROM `cache_field` WHERE `cache_field`.`cid` = 'field:node:".$node->nid."' LIMIT 1 ;");
drupal_set_message('_Очищен кэш для страницы <em class="placeholder">'. $node->title. '</em>.');
}
?>
Чего еще можно придумать? Материалы не редактируются и всё - показываются старые данные. Если из phpMyAdmin удаляю кэш, то показываются актуальные данные.
Проблему в битыми таблицами решите, проверьте чтобы структура бд идентична бд свежего друпал сайта, а вы костыли городите.
Проблема решена, патч ядра.