Застереження Повість про Горе: помилка, яка пішла
Минулого тижня я випустила оновлену версію свого Зміст Творець плагін для WordPress. Я пишаюся у своїй кодуванні, пошук несправностей і тестування здібностей. Це все звалилося в одну ніч.
Щоб вирізати Коротше кажучи, у новій редакції вимагає допоміжні функції для відображення після запису. Допоміжна функція, тільки називається по одній функції, і тому я обрав включити допоміжну функцію, як дитина з цієї функції. Це звичайна практика в багатьох мовах, як це акуратно упаковує всі функції та їх помічників в безпосередній близькості. Батьківської функції речі викликається кожен раз, коли сторінка відображається і закінчується одразу ж, якщо ця сторінка не включає в себе ініціатором карта тегів.
Ок. Проходить час. В даний час 2:00 ночі. Код готовий до тестування. Я знаю, що вихід батьківської функції відразу ж, якщо він не знайде ініціатором тегів. Це раніше працював, і я нікуди не ходив поруч з нею, тому вона повинна продовжувати працювати. Чи не так? Я перевіряю карта сайту, спробуйте все нових і старих варіантів і довести, що код працює як задумано. Я швидко синхронізувати SVN репозиторій і бігти спати, щоб виспатися до сходу сонця.
На наступний ранок я вирішив перевірити велику ділянку, який я знаю, що мій плагін використовує. Там не замінить реального тестування світу. Так, це все виглядає добре. В цей момент я помітив, повідомлення в карті сайту, які здавалися цікавими. Я натиснув на посилання та категорії було представлено перше повідомлення в категорію, а потім великий неприємне повідомлення про помилку PHP. Ммм. Я подивився на іншого великого сайту. Ммм. Може бути, просто збіг. Давайте поглянемо на ще один. О, ні!
Так що ж пішло не так? Пам'ятайте, що дитина функції? Я чув, що діти можуть бути злими і з'ясувалося, щоб бути правдою в цьому випадку. При сторінки блогу, сторінки категорії, теги сторінки або навіть головній сторінці було показано, численні повідомлення відображаються на одній сторінці. WordPress робить це, роблячи вигляд, що кожне повідомлення представляє собою міні-сторінки і пов'язує всі міні-сторінки разом, щоб сформувати одну велику сторінку. Це означає, що мої батьки функція викликається кілька разів. Як правило, не проблема. Але тепер, як функція містить дочірніх функцій, ці функції дитини створюються кожен раз, коли батьки функція називається (навіть якщо вони не використовуються). Тому, коли то другий пост відображення сторінки падає з дублікатом повідомлення про помилку ім'я функції. В результаті нетто в тому, що невелика помилка в, здавалося б, не пов'язані функції викликали кілька дуже великих сайтів, щоб піти вниз.
Мораль цієї байки така: якщо ви є адміністратором сайту, переконайтеся, що ви запустите повний набір тестів, після кожного оновлення плагінів, незалежно від того, наскільки велика або мала, що плагін може бути.



















