Что за ошибка? Ничего не трогал

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

Fatal error: Call to a member function getBlog() on a non-object in /home/9759_knife/data/www/localhost/templates/compiled/new/%%17^171^17121A2C%%block.stream_comment.tpl.php on line 13

Почему? Ладно бы если редактировал что нибудь, а тут вот так напугало(
Теперь пол сайта криво показывает и прямой эфир не работает

10 комментариев

avatar
Помогите пожалуйста, знаю что комментарий на свой топик первому писать нельзя, но мне очень срочно к вечеру рабочий сайт нужен((
avatar
сбросьте кеш, не поможет стучите в личку попрбую помочь
avatar
кеш сбрасывал, не помогает=\
avatar
А вы попробуйте перелазить сбойный файлик на гарантированно нормальный из дистрибутива и снова сбросить кеш.
avatar
удалённый пользователь, от которого в БД остался комментарий. Это вы сделали админкой
avatar
Такая ошибка может возникнуть, когда удаляешь топик с комментариями. Причем при удалении топика комментарии не удаляются и нарушаются связи в базе данных (БД).

В phpmyadmin (или в другом менеджере БД сайта) сделайте запрос:
select * from prefix_comment where target_id not in (select topic_id from prefix_topic) AND target_type = "topic" 

Если появится список таких непривязанных комментариев — можете их удалить вручную (по одному) или попытаться удалить командой:
delete from prefix_comment where target_id = XXX
, где ХХХ — это ID-шник удаленного топика, от которого остались висеть комментарии (его номер Вы можете увидеть в таблице вывода предыдущего запроса — у «висящих» комментариев target_id обычно один и тот же, вот его и надо указывать в ХХХ).

Если было удалено несколько топиков, то у «висящих» комментариев будут несколько разных target_id. Следовательно нужно сделать несколько запросов delete…

Если среди «висящих» комментариев есть вложенные, то удалить сразу все такие комментарии одной командой не получится. В таком случае можно вывести список:
select * from prefix_comment where target_id = XXX
и удалять вручную по несколько штук, начиная с последнего комментария (обратная сортировка по comment_id).

Внимание: delete выполняйте на СВОЙ страх и риск. Если Вы хорошо не разбираетесь в MySQL, то нечаянно этой командой Вы можете грохнуть БД сайта.

Сам вначале разбирался около часа, потом (если возникает) делаю за пару минут.
avatar
В догонку, о причине возникновения ошибки.

Если сайт хорошо посещаемый, то при удалении топика очень вероятно получить ситуацию, когда в это время кто-то будет постить комментарий. Пару раз нарывался — после чего чистил базу данных вышеописанным способом. Чтобы минимизировать или избежать такой ошибки, теперь я сначала отправляю топик в черновики, жду 10 минут, а затем удаляю его.
avatar
Т.е. удаление топика с комментариями всегда приводит к такой ошибке?
avatar
Нет, только в редких случаях. Подозреваю, что такое случается, когда одновременно с удалением кто-то из пользователей постит комментарий в удаляемый топик.

Я так думаю по тому, что у меня было несколько случаев, когда я удалял очень обсуждаемые топики (комментарии постились примерно каждые 10 секунд). И с тех пор, когда я начал перед удалением сохранять топик в черновики — ошибка больше не возникала.
avatar
klyuchnik, спасибо большое, всё работает
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.