Socially Awkward Penguin blog


29 Jul // Requests(httplib3) debug output

Для отключения мусора, что может выдавать либа httplib3(из комплекта либы requests), достаточно просто добавить в любой значимый файл вот такой код:

import logging
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.WARNING)

16 Jul // VirtualBox и проблемы с HDD

На днях два раза попали с проблемой, которая положила на несколько часов продакшн и заставила понервничать, перезапускать все проекты и следить за поднятием всех подсистем.

Файловая система не выдержала нагрузки и ремаунтнула рут в read-only, в результате чего получилось всё очень и очень плохо - всё лежало. Проблема оказалась в том, что VirtualBox не успевал сейвить данные на диск, так как в тот момент, когда он хотел это делать(а делал он "по своему желанию"), данных было многовато. Проблема решается ограничением буффера записи контроллера до, как в нашем случае, 1 мб - VirtualBox чаще сейвит всё на диск и проблема, по идее, должна пропасть. Конечно, это сильнее будет изнашивать физический носитель информации, но главное что всё будет работать под сильными нагрузками.

К слову, это вообще очень давняя проблема VB! Вся информация о том, как ограничить буффер, что и как: https://www.virtualbox.org/manual/ch12.html#ts_config-periodic-flush

13 Jun // Хаха, я сошёл с ума

Найдите ошибку:

   if (request.method is 'POST' and
        contact_form.is_valid() and
        #check position form only if we got organization or form is changed
        ((not position_form.has_changed() and not organization) or position_form.is_valid()) and
        address_formset.is_valid(),
            contact_info_formset.is_valid()):
        contact = contact_form.save(request.user, commit=False)

Она тут есть.

12 Jun // HTTrack: пример зеркалирования с учётом многих нюансов

httrack http://www.supersite.com/ru/ \
    -O "~/websites/supersite" \
    -P login:pass@10.1.0.16:3128 \
    --disable-security-limits \
    -c500 \
    -%c1000 \
    --max-rate=100000000000 \
    --timeout=10 \
    --retries=10 \
    -#L100000000000 \
    -https://m.supersite.com/* \
    -http://m.supersite.com/* \
    +https://*[a-z].supersite.com/ru/* \
    +https://*[a-z].supersite.com/static/* \
    +http://*[a-z].supersite.com/ru/* \
    +http://*[a-z].supersite.com/static/* \
    +https://misc.supersite.com/* \
    +http://misc.supersite.com/* \
    -%v \

Собственно, в том же порядке комментарии:

  1. http://www.supersite.com/ru/ — Откуда начинать поиск страниц. Главная страница сайта, начиная с которой нас всё интересует.
  2. -O "~/websites/supersite" — Где сохраняем.
  3. -P login:pass@10.1.0.16:3128 — Прокси. Иногда не подхватывает из окружения, так что лучше тут указать.
  4. --disable-security-limits — Выключаем все разумные ограничения! Очень могут мешать, так как блокируют некоторые опции.
  5. -c500 — Максимальное число одновременных соединений.
  6. -%c1000 — Максимальное число соединений в секунду.
  7. --max-rate=100000000000 — Ставим скорость "практически без ограничения", по-умолчанию стоит всего 1000бпс.
  8. --timeout=10 — На практике было замечено, что некоторые страницы могут подвисать и не отдаваться вообще никогда. Смысла ждать долго просто нет.
  9. --retries=10 — Но если страница не открылась, HTTrack просто дропнет её сразу, без повтора. Дадим шанс до 10 раз, так как некоторые страницы могут застревать в очереди больше одного раза.
  10. -#L100000000000 — Узнал о такой "проблеме" уже после 2х суток мирроринга. Максимальное число страниц по-умолчанию - 10000, после этого HTTrack выключается, а новый запуск будет скачивать всё с нуля. Следовательно, увеличим число максимально. Если что, можно всегда и ручками прервать.
  11. -%v — Показываем всё красиво, со статусом.

Следует избегать фильтров, начинающихся с *****, так как в под фильтр попадают всякие "Share-it" сайты, а затем начинают попадать в дамп и они - это нам не нужно.

Стоит проверять наличие мобильных версий и отключать их дамп, так как там будет одно и то же, но время мирроринга увеличится в 2 раза.

Если нужны все под-домены, то следует указывать строгий wildcard — *http://[a-z].site.com и, конечно, не забывать о https.

30 Apr // Scoped CSS в ExtJS 4.2+

У ExtJS есть плохая черта: он может перекрывать CSS-правила сайта даже не для ExtJS-виджетов. Например, использовать ExtJS с Twitter Bootstrap может быть достаточно проблематично. Для решения данной проблемы существует scoped-версия ExtJS CSS, которая идёт в комплекте. Однако, с версии 4.2 файл пропал. Как же жить дальше?

Оказывается, убрали его за "ненадобностью".

Такие пироги.

11 Mar // Python Quack Quack

Сегодня на работе натолкнулись на проблему: на продакшне стала падать страница создания счетов. Трейсбек указывал на строку:

File "python2.6/site-packages/django/db/models/sql/where.py", line 57, in add
    value = list(value)

Код же был прост и элементарен:

Foo.objects.filter(x=y)

Казалось бы, зачем приводить здесь что-то к листу? Вся магия оказалась в проверке строкой выше, в том же файле, в models/sql/where.py:

if isinstance(value, collections.Iterator):
    ...

Но почему isinstance возвращает True? y не является итератором, это просто экземпляр модели!

30 Jan // PACI: Облачный Infobox

Ещё в 2005ом году Cloud computing начал набирать обороты с появлением Amazon Elastic Compute Cloud. Это была настоящая инновация, полное переосмысление того, как мы используем ресурсы вычислительных систем.

Облака обещали нам экономию денег на неиспользуемых ресурсах, необычайную стабильность систем, автоматизированное скалирование, лёгкий деплоймент и лишение стольких головных болей, что преследовали многих веб-разработчиков и не только!

И что же мы имеем? Сервисы облачных вычислений это:

  • Дорого. Смысл платить 100$ в месяц, если я могу за 10$ арендовать сервер в 3 раза лучше в плане ресурсов? — скажет любой человек.
  • Нестабильно. Отечественные поставщики облачных систем пользуются не просто плохой, а очень плохой репутацией. Сервера недоступны, сервера падают, сервера не поднимаются, оборудование ломается, люди извиняются, но ситуация повторяется из месяца в месяц!
  • Неудобно. Мы хотели платить только за то, что используем. Мы хотели в любой момент добавить виртуальную машину, чтобы, например, горизонтально масштабировать веб-приложение. Мы хотели чтобы всё работало моментально и позволило нам забыть о том, что такое "железо", но мы только натыкаемся на проблемы с ним.

В конце 2011ого года, компания Parallels пришла на помощь к провайдерам облачных решений, Parallels выпустила продукт, призванный решить многие проблемы облачных вычислительных систем - Parallels Automation for Cloud Infrastructure (PACI).

И сейчас, компания Infobox, при сотрудничестве с Parallels, готовит к запуску сервис облачных вычислений на базе PACI. Более того, уже сейчас это можно потрогать!

Судя по всему, готовится что-то, способное затмить многие "российские облака". А может быть и не только российские?

Так давайте пощупаем этот PACI!