Читать «Bash IT Happens Истории ## 9601 – 9700» онлайн - страница 30

Bash.org.ru IT

Бухгалтер в панике (скоро зарплата и вообще) садится на телефон дозваниваться в техподдержку. Всего есть четыре телефона: тот, откуда звонили первоначально, но «мы ничего не знаем, мы только уведомляем», второй со «скажите ваш номер телефона, я заявку оставлю, вам перезвонят» и два именно техподдержки, но там, как водится, занято или трубку не берут. Принимается волевое решение попробовать снова через часок.

Через час ввожу свежезаменённый пароль — не подходит. Забыл, плохо ввёл, глюк программы? Админскую учётку не блокируют, поэтому идёт перебор всех близко похожих, мало похожих и «может, я вот тут ошибся». Чтение документации. Безрезультатно, теперь в панике уже я. Начинается массированная попытка дозвониться до техподдержки уже с целью восстановления пароля и получения обновления.

В недрах великого Гугла находится непонятно когда и непонятно кем созданная тема, как восстановить пароль. Надо в %foldername% удалить %filename% и заново всех перерегистрировать. Деваться некуда, приступаю. Бэкап, удаление файла, начало новой регистрации. Программа предлагает сразу ввести новый пароль для админа два раза, как водится. Печатаю я вслепую, а тут пароль крипкостойкий, и смотрю я на клавиатуру, поэтому не сразу замечаю, что из 11 вводимых символов в форму добавляется только восемь!

Меня осеняет. Отменяю всё, восстанавливаю из бэкапа файл, ввожу восемь символов нового пароля — получается! То бишь при замене пароля в форму можно вбить только восемь символов, а при авторизации — сколько угодно. Спасибо программистам из банка за два дня нервов.

Отсюда я сделал вывод: внимательность прежде всего! А из техподдержки потом позвонили. Оказалось, что программа у нас самая свежайшая и обновлённая, что подтверждает истину: работает — не трогай.

#9677: Бар «Двойной инкремент»

12:15 04.08.2012, IT happens

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

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

$faq = Faq::find($id);

$faq->views++;

$faq->save();

Получаем нужную запись, увеличиваем значение поля на единицу и сохраняем.

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