Проблемы с wgHTML

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

Аватар пользователя Azerot Azerot 25 января 2009 в 19:47

Люди, нужен совет.
У меня есть сайт на Drupal5, где я использую некое количество документации выложенной в виде статического HTML.
Для интеграции в CMS был использован модуль wgHTML. Модуль отмечен на сайте Drupal как рекомендованный, однако с ним появились проблемы. (Прошу вас, не давайте мне ценных советов, что лучше всю статику затащить в Drupal, просто примите как данность, что мне нужна статика и точка.)

Первая проблема связана с тем, что у меня постоянно и очень быстро росли таблицы модуля wghtml_versions и wghtml_pages. При относительно небольшом размере статического HTML буквально за неделю эти таблицы достигали в сумме 300 мегабайт. Я стал их просто чистить по cron'у и думал, что проблема решена, но тут возникла вторая проблема.

Вторая проблема заключается в том, что у меня растёт таблица node_revisions. Растёт она не так быстро как wghtml_versions, но тем не менее размер у неё уже такой, что я понимаю - надо что-то с этим делать! Но как же мне грамотно её почистить? Ведь кроме статики на моём сайте есть и обычный материал? Посоветуйте пожалуйста!

Комментарии

Аватар пользователя Valeratal Valeratal 25 января 2009 в 20:47

может я чего не понимаю
но модуль wghtml предназначен ДЛЯ ИМПОРТА статики в друпал. То есть в этих таблицах собираются импортированные ноды
вы чего с ним делали то? Smile

Аватар пользователя Azerot Azerot 25 января 2009 в 21:22

Мне кажется вы не до конца понимаете суть этого импорта.
На самом деле это не совсем корректно говорить именно про импорт.
Просто wgHTML КЭШИРУЕТ обработанную статику в таблицы Drupal. Вот этот механизм кэширования (насколько я понял код модуля) и реализуется посредством представления статики как нод в Drupal. Однако, если вы нажмёте в браузере Ctrl+F5, то будет произведено повторное чтение статики и "реимпорт" в кавычках в Drupal. То же самое будет и по истечении времени жизни кэша, которое задаётся в самом модуле.

Ну сейчас у меня вопрос в том, как мне очистить node_revisions, чтобы не угробить ничего нужного?

Аватар пользователя Valeratal Valeratal 25 января 2009 в 23:34

возможно я не таки понимаю, но если что то пишется в друпал как ноды, то это сохраняется в node_revisions - поэтому они и растут
но этим модулем я импортировал ноды
затем другим модулем, переводил созданные ноды (созданные ноды ведь пишутся в node_revisions) в ноды другого вида. А потом, когда все перевел, удалил таблицы wghtml_versions и wghtml_pages

Аватар пользователя olk olk 26 января 2009 в 12:32
 DELETE FROM {node_revisions} nr WHERE EXISTS(SELECT 1 FROM {node} n WHERE n.nid=nr.nid AND n.vid>nr.vid)

Удалит все старые ревизии нод ...
Но перед этим я все ткаи забэкапил бы базу Smile

Аватар пользователя Azerot Azerot 26 января 2009 в 22:20

Я сделал вот так:

DELETE FROM node_revisions WHERE vid IN (SELECT vid FROM node WHERE type='wghtml');

Всё бы круто, да вот только после этого ничего не показывает на тех страничках, где должна быть статика!
(бакап базы был, вернул всё в зад)
Что я делаю не так?

Аватар пользователя olk olk 27 января 2009 в 10:54

Вы удалили все ревизии а надо было только не последние (а в последнюю ревизию входит и тело ноды)
поэтому я и дал вам такой запрос (если надо только для wghtml) то подойдет такой

DELETE FROM {node_revisions} nr WHERE
EXSIST(SELECT 1 FROM {node} n WHERE n.nid=nr.nid AND n.vid>nr.vid AND n.type='wghtml')

но это не спасет вас от дальнейшего реэкспорта, просто вы спросили как грамотно почистить node_revisions,
я ответил Smile
а как подгружать статику, вопрос другой (я бы лучше нашел или написал модуль который не хранит статику в ноде, а подгружает ее допустим через file_get_contents, но и тут могут возникнуть проблемы с кэшированием)

Аватар пользователя Azerot Azerot 26 января 2009 в 22:22

Попробовал ещё почистить:

DELETE FROM node WHERE type='wghtml';

в надежде, что гадская догадается, что раз нет такого нода, надо сделать реимпорт. Фигу Sad

Аватар пользователя Azerot Azerot 27 января 2009 в 12:16

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

Спасибо за помощь, я попробую ваш запрос и отпишусь, что получилось в итоге.

Аватар пользователя Azerot Azerot 3 февраля 2009 в 23:25

В общем всё оказалось не так! Неправильный совет. Не работает!
А почистить можно вот так:

delete from node_revisions where nid IN (select nid from node where type='wghtml');
delete from node_access where nid IN (select nid from node where type='wghtml');
delete from node_comment_statistics where nid IN (select nid from node where type='wghtml');
delete from node where type='wghtml';
delete from wghtml_versions;
delete from wghtml_pages;