Предостережение Повесть о Горе: ошибка, которая ушла
На прошлой неделе я выпустила обновленную версию своего Содержание Творца плагин для WordPress. Я горжусь в моей кодирования, поиска неисправностей и тестирования способностей. Что все рухнуло в одну ночь.
Чтобы вырезать Короче говоря, новая редакция необходимые вспомогательные функции для отображения редактировать записи. Вспомогательная функция была только вызывается одна функция, и поэтому я избрал включить вспомогательную функцию, как ребенок этой функции. Это обычная практика во многих языках, как аккуратно пакетов все функции и их помощников в непосредственной близости. Родительской функции кстати вызывается каждый раз, когда страница отображается и заканчивается сразу же, если эта страница не включает в себя инициатором карта тега.
Ok. Проходит время. В настоящее время 2 часов ночи. Теперь код готов к тестированию. Я знаю, что выходит родительской функции сразу же, если он не найдет инициатором тега. Это ранее работал, и я никуда не ходил рядом с ней, поэтому она должна продолжать работать. Верно? Я проверяю страница карта сайта, попробуйте все новых и старых вариантов и доказать, что код работает как задумано. Я быстро синхронизировать SVN репозиторий и бросаются в постель, чтобы немного поспать, прежде чем взойдет солнце.
На следующее утро я решил проверить большой участок, который я знаю, что использует мой плагин. Там не заменит реального тестирования мире. Да, это все выглядит хорошо. В этот момент я заметил, сообщение в карте сайта, которые казались интересными. Я нажал на ссылку и категории был представлен первый пост в категорию, а затем большая неприятную ошибку PHP сообщении. Ммм. Я посмотрел на другого крупного сайта. Ммм. Может быть, совпадение. Давайте взглянем на еще один. О, нет!
Так что же пошло не так? Помните, что ребенок функции? Я слышал, что дети могут быть злыми, и оказалось, чтобы быть правдой в этом случае. Если страницы блога, страницы категории, теги страницу или даже домашняя страница была выставлена, многочисленные сообщения отображаются на одной странице. WordPress делает это, делая вид, что каждое сообщение представляет собой мини-страницы и ссылки все мини-страницы вместе, чтобы сформировать одну большую страницу. Это означает, что мой родитель функция вызывается несколько раз. Как правило, не проблема. Но теперь, как функция содержит дочерних функций, эти функции ребенка создаются каждый раз родительской функции называется (даже если они не используются). Поэтому, когда то второе сообщение отображается, страница рушится с дубликатом сообщение имя функции ошибки. Результат нетто было то, что небольшая ошибка в кажущиеся несвязанными функцию вызвало несколько очень крупных сайтов, чтобы пойти вниз.
Моральный дух истории: если вы администратор сайта, не забудьте запустить полный набор тестов, после каждого обновления плагина, независимо от того, насколько велика или мала, что плагин может быть.



















