Мы в социальных сетях: Вконтакте Facebook Одноклассники LiveJournal Twitter Мой Мир

Автор dr.MIG
dr.MIG
Врач-невролог, мануальный терапевт, спортсмен, администратор сайта и просто хороший человек
Пользователь не на сайте
Пятница, 03 августа 2012
в Блог

Адский инкремент

Нужно было сейчас добавить на одну из страниц одного проекта счетчик просмотров. Самый-самый простой: если кто-то запросил страницу, то увеличиваем на один предыдущее значение в базе. Но такая простая задача заняла ровно один вечер и одно утро и почти заставила меня поверить в сверхъестественное, прежде чем была реализована.

В качестве библиотеки для общения с базой MySQL на сайте используется библиотека activerecord. Соответственно весь код составил пару строк:

 $faq = Faq::find($id]);
 $faq->views++;
 $faq->save();

Т.е. получаем нужную запись, увеличиваем значение поля на один и сохраняем. При тестировании выяснилось, что счетчик посещений при заходе увеличивается не на один, а на два. Перепроверил на всякий случай структуру таблицы в базе данных, попробовал на всякий случай обновить значение другим способом (вдруг ошибка в библиотеке), погуглил по запросу «activerecord double increment problem», все бестолку. Непонимая, что может быть не так в коде ушел спать, так как обычно это помогает — за ночь мозг переосмыслит проблему и утром будет свежее решение. Как такового решения утром не оказалось и я уже был готов поверить в сверхестественное и выводить количество посещений как результат поля, деленный на два, но в очередной раз перезагружая страницу с этим адским счетчиком, в статусной строке браузера я заметил, промелькнувшее на мгновение слово «yandex». Да, я тестировал сайт в браузере Firefox, в котором была установлена панель RDS bar, которая как раз и дергала страницу, синхронно со мной, увеличивая счетчик еще на единицу...

P.S. Эта история попала на IT happens.

0 голосов
Врач-невролог, мануальный терапевт, спортсмен, администратор сайта и просто хороший человек

Комментарии

Чтобы добавить комментарий, сначала войдите, пожалуйста