[Решено]Как можно выполнить запрос к БД?

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

Аватар пользователя kovtunos kovtunos 20 августа 2009 в 20:22

Как можно осуществить такой запрос средствами Drupal?

TRUNCATE `cache`;
TRUNCATE `cache_block`;
TRUNCATE `cache_browscap`;
TRUNCATE `cache_content`;
TRUNCATE `cache_filter`;
TRUNCATE `cache_form`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
TRUNCATE `cache_update`;
TRUNCATE `cache_views`;
TRUNCATE `cache_views_data`;

БД из-за кеша растет очень быстро. Стандартная очистка кеша работает неудовлетворительно. Каждый день получаю предупреждения хостера об достижении лимита на размер базы.

Комментарии

Аватар пользователя bsdi4 bsdi4 20 августа 2009 в 21:36

kovtunos wrote:
Как можно осуществить такой запрос средствами Drupal?

Если Drupal'ом то так:

db_query("
  TRUNCATE cache;
  TRUNCATE cache_block;
  TRUNCATE cache_browscap;
  TRUNCATE cache_content;
  TRUNCATE cache_filter;
  TRUNCATE cache_form;
  TRUNCATE cache_menu;
  TRUNCATE cache_page;
  TRUNCATE cache_update;
  TRUNCATE cache_views;
  TRUNCATE cache_views_data;
"
);

Более подробно тут или тут.

Аватар пользователя kovtunos kovtunos 20 августа 2009 в 22:05

Ну вот я создал, к примеру, в корне файл для запуска очистки: truncate-cache.php
Что должно быть в нем, кроме указанной db_query(); ?

Аватар пользователя bsdi4 bsdi4 20 августа 2009 в 22:36

kovtunos wrote:
Ну вот я создал, к примеру, в корне файл для запуска очистки: truncate-cache.php
Что должно быть в нем, кроме указанной db_query(); ?

если "truncate-cache.php" на ходится в корне, то так:

require_once './includes/bootstrap.inc';

// Для работы с базой
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);

// Если нужно прям совсем все то:
// drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

db_query("
  TRUNCATE cache;
  TRUNCATE cache_block;
  TRUNCATE cache_browscap;
  TRUNCATE cache_content;
  TRUNCATE cache_filter;
  TRUNCATE cache_form;
  TRUNCATE cache_menu;
  TRUNCATE cache_page;
  TRUNCATE cache_update;
  TRUNCATE cache_views;
  TRUNCATE cache_views_data;
"
);

Аватар пользователя bsdi4 bsdi4 21 августа 2009 в 0:04

kovtunos wrote:
bsdi4 wrote:
если "truncate-cache.php" на ходится в корне, то так:

Ничего не происходит :(

Всмысле ?! Выполни скрипт и посмотри содержание таблиц.

<?php
if(!file_exists('./includes/bootstrap.inc')){
  print "exit";
  exit();
}

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
db_query("TRUNCATE cache_content;");
print "cleaned";

?>

Сейчас только выполнил и таблица очистилась.

kovtunos][quote=Paldru wrote:
А если это в ноду впихнуть, и сделать неопубликованной. Тогда при загрузке странички будет выполняться ваш код

Это понятно, т.к код выполняется в теле ноды. оно вам надо?! если разницы нет, то остовляйте ноде.

Аватар пользователя Paldru Paldru 20 августа 2009 в 22:18

"kovtunos" wrote:
Ну вот я создал, к примеру, в корне файл для запуска очистки: truncate-cache.php
Что должно быть в нем, кроме указанной db_query(); ?

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

Аватар пользователя kovtunos kovtunos 20 августа 2009 в 23:09

Paldru wrote:
А если это в ноду впихнуть, и сделать неопубликованной. Тогда при загрузке странички будет выполняться ваш код

Если в код страницы вставить такое:

<?php
  db_query("
  TRUNCATE cache;
  TRUNCATE cache_block;
  TRUNCATE cache_browscap;
  TRUNCATE cache_content;
  TRUNCATE cache_filter;
  TRUNCATE cache_form;
  TRUNCATE cache_menu;
  TRUNCATE cache_page;
  TRUNCATE cache_update;
  TRUNCATE cache_views;
  TRUNCATE cache_views_data;
"
);?>

то ничего не выполняется. ЧЯДНТ?
p.s. перед cache естественно еще стоит префикс таблицы

Аватар пользователя Psixo Psixo 21 августа 2009 в 0:17

Кстати, интересует такой момент!
Как это ещё заставить выполняться по крону (доступа к crontab нет, но стоит модуль его заменяющий).

Аватар пользователя bsdi4 bsdi4 21 августа 2009 в 0:42

Psixo wrote:
Кстати, интересует такой момент!
Как это ещё заставить выполняться по крону (доступа к crontab нет, но стоит модуль его заменяющий).

обращаться с другой машины в которой есть крон, ставите время на команду для обращения к http://www.ваш_адрес.ru/cron.php, если таковое отсутствует то планировщик задач)
предварительно дополнив .htaccess:

<Files "cron.php">
 Order Deny,Allow
 Deny from all
 Allow from 127.0.0.1
 Allow from ваш_ip или доменное_имя
</Files>
Аватар пользователя Psixo Psixo 21 августа 2009 в 1:00

Нашел другой вариант Lol
Я процесс в фоне (через ssh) запустил, и поставил слип на 24 часа в бесконечном цикле Smile

Аватар пользователя bsdi4 bsdi4 21 августа 2009 в 1:14

Psixo wrote:
Нашел другой вариант Lol
Я процесс в фоне (через ssh) запустил, и поставил слип на 24 часа в бесконечном цикле :)

Изврат, но как временный выход вполне, до перезагрузки))

Аватар пользователя kovtunos kovtunos 21 августа 2009 в 8:15

Ну у меня тоже вариант: на машине с линуксом на борту, работающей круглосуточно, по крону выполняю такой скрипт:
/usr/bin/lynx -source http://my.site.com/cron.php > /dev/null 2>&1

Аватар пользователя Dendix Dendix 24 марта 2011 в 1:06

"bsdi4" wrote:
<?php
if(!file_exists('./includes/bootstrap.inc')){
print "exit";
exit();
}

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
db_query("TRUNCATE cache_content;");
print "cleaned";

?>


Спасибо! Помогло.