Нужно было сейчас добавить на одну из страниц одного проекта счетчик просмотров. Самый-самый простой: если кто-то запросил страницу, то увеличиваем на один предыдущее значение в базе. Но такая простая задача заняла ровно один вечер и одно утро и почти заставила меня поверить в сверхъестественное, прежде чем была реализована.
В качестве библиотеки для общения с базой MySQL на сайте используется библиотека activerecord. Соответственно весь код составил пару строк:
$faq = Faq::find($id]);
$faq->views++;
$faq->save();
Т.е. получаем нужную запись, увеличиваем значение поля на один и сохраняем. При тестировании выяснилось, что счетчик посещений при заходе увеличивается не на один, а на два. Перепроверил на всякий случай структуру таблицы в базе данных, попробовал на всякий случай обновить значение другим способом (вдруг ошибка в библиотеке), погуглил по запросу «activerecord double increment problem», все бестолку. Непонимая, что может быть не так в коде ушел спать, так как обычно это помогает — за ночь мозг переосмыслит проблему и утром будет свежее решение. Как такового решения утром не оказалось и я уже был готов поверить в сверхестественное и выводить количество посещений как результат поля, деленный на два, но в очередной раз перезагружая страницу с этим адским счетчиком, в статусной строке браузера я заметил, промелькнувшее на мгновение слово «yandex». Да, я тестировал сайт в браузере Firefox, в котором была установлена панель RDS bar, которая как раз и дергала страницу, синхронно со мной, увеличивая счетчик еще на единицу...
P.S. Эта история попала на IT happens.