Не редактируются материалы на сайте (проблема с кэшами)

Главные вкладки

Аватар пользователя Snake-YAVA Snake-YAVA 21 декабря 2014 в 15:58

После обновления ядра и модулей до последней версии, перестали редактироваться материалы на сайте. Редактирую поля материала, но после сохранения никаких изменений не вижу. Ошибки не логируются. Очистка кэша из друпал возможно не срабатывает, после того как очистил таблицы кэшей в БД, показывается актуальная страница с изменёнными полями. В настройках друпал кэширование не включено. Куда копать, что делать? Те, кто занимался обновлением, не сделали никаких бэкапов, ну и после этого надобавляли новые материалы на сайт, поэтому откатиться нет возможности.

Комментарии

Аватар пользователя Moel Moel 21 декабря 2014 в 18:30

"Snake-YAVA" wrote:
Те, кто занимался обновлением, не сделали никаких бэкапов

Может спросить у них? Как так или типо того.

Аватар пользователя Snake-YAVA Snake-YAVA 21 декабря 2014 в 20:30

"Garin33" wrote:
Может доп модули кеша стоят, типа Boost и тд. Проверьте какие модули установлены.

нет, модулей для работы с кэшами, нету. Пробовал выборочно отключать разные модули, не помогает.

"Garin33" wrote:
Зря вручную что-то в бд чистили.

как это может повлиять? Только таблицы cache_* чистил:
TRUNCATE TABLE `cache`;

Перенёс сайт на свой хостинг и экспериментирую. Идей как можно выявить причину уже не осталось.

Аналогичная ситуация, не только с материалами, например, меняю некоторые настройки, но они не применяются:
например тут
/admin/config/development/logging
изменения появятся только если очистить кэши из БД. Из друпала чистить кэш бесполезно /admin/config/development/performance.

Аватар пользователя EvgenySorokin EvgenySorokin 21 декабря 2014 в 21:01

https://www.drupal.org/project/admin_menu не установлен? Там можно все кеши почистить одним кликом.
Еще вариант - drush поставить, попробовать им почистить.
Еще вариант уже предлагали выше - дергать тех, кто обновлял, может быть какие-то ошибки были, что-то натворили и молчат.

Кроме того, можно в саппорт хостинга написать, может быть у них свои бекапы есть.

Аватар пользователя Snake-YAVA Snake-YAVA 22 декабря 2014 в 19:43

В БД была битая таблица cache_rules. Выдавала ошибку: #1146 - Table 'infurs_db.cache_rules' doesn't exist. По сути отсутствовала таблица. Создал пустую таблицу cache_rules, но проблему с редактированием материалов это не решило. После редактирования всё равно отображаются старые данные.

CREATE TABLE IF NOT EXISTS `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.';

"Garin33" wrote:
Кроме того, можно в саппорт хостинга написать, может быть у них свои бекапы есть.

Да, там сюрприз у хостера, бэкапы не делались из-за ошибки с таблицей cache_rules.

"Garin33" wrote:
https://www.drupal.org/project/admin_menu не установлен? Там можно все кеши почистить одним кликом.
Еще вариант - drush поставить, попробовать им почистить.

Ну не чистить же в ручную кэши после каждого действия на сайте. Не выход.

Аватар пользователя Snake-YAVA Snake-YAVA 22 декабря 2014 в 20:37

Нашёл реализацию модуля очищающего кэш каждой страницы
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,
    );

  }
}

?>

После редактирования материала, отображается сообщение что кэш очищен, но всё равно отображается необновлённая страница. А если в ручную удаляю кэш поля конкретного материала, то показывается актуальная страница.

DELETE FROM `cache_field` WHERE  `cache_field`.`cid` =  'field:node:2438' LIMIT 1 ;

Почему cache_clear_all не срабатывает?

Аватар пользователя Snake-YAVA Snake-YAVA 24 декабря 2014 в 17:37

Попробовал установить модуль 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 удаляю кэш, то показываются актуальные данные.

Аватар пользователя EvgenySorokin EvgenySorokin 25 декабря 2014 в 11:21

Проблему в битыми таблицами решите, проверьте чтобы структура бд идентична бд свежего друпал сайта, а вы костыли городите.