Проблемы с локалью в Ubuntu

Обновляя недавно версию Ubuntu на своём VPS столкнулся с тем, что часть пакетов и системных скриптов при обновлении/запуске выдает подобную ошибку:

perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
    are supported and installed on your system.

Как выяснилось, у этой проблемы может быть одна из следующих причин:

  • С локалью в системе действительно проблемы. В таком случае надо проверить /etc/default/locale и убедиться что настроенная локаль присутствует в системе (список можно увидеть по команде locale -a). При необходимости пересоздать локаль командой locale-gen <locale name> и возможно запустить перенастройку локалей dpkg-reconfigure locales
  • Если вы подключены через SSH, то ваш SSH клиент может передавать настройки локали на сервер. В этом случае приведенные выше манипуляции никак не помогут и надо просто отключить передачу этих настроек. Для этого достаточно найти файл ssh_config (в Mac OS X это /etc/ssh_config) и закомментировать строчку:
    SendEnv LANG LC_*
    

Протоколирование в Sentry для Twisted

При настройке протоколирования в Sentry для наших проектов возник интересный вопрос: как лучше передавать сообщения об ошибках из Twisted. Простое гугление подсказало один из очевидных вариантов, но он имел свои недостатки: ошибки протоколировались в лучшем случае в непотребном виде:

'Traceback (most recent call last):\n  File "/usr/lib/python2.7/dist-packages/XXX/XXX/XXX/xxx.py", line 180, in connect\n    connection = cx_Oracle.connect(**self.dsn)\nDatabaseError: ORA-12170: TNS:\xd0\xb8\xd1\x81\xd1\x82\xd0\xb5\xd0\xba\xd0\xbb\xd0\xbe \xd0\xb2\xd1\x80\xd0\xb5\xd0\xbc\xd1\x8f \xd0\xbe\xd0\xb6\xd0\xb8\xd0\xb4\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f \xd1\x81\xd0\xbe\xd0\xb5\xd0\xb4\xd0\xb8\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f\n\n'

Понятно, что для практических целей это трудноприменимо, поэтому путем экспериментов и чтения документации Twisted был найден следующий более оптимальный вариант:

Continue reading Протоколирование в Sentry для Twisted

Упрощение инсталляции сервера sentry

Sentry предоставляет удобный интерфейс для оперативного мониторинга ошибок или успешности работы сервисов. Однако, использовать платный сервис с getsentry.com не всем удобно да и не все могут в силу различных мер безопасности отправлять уведомления о своих ошибках во внешние сервисы. В связи с этим для многих актуально устанавливать сервер на внутренних ресурсах, и раньше я уже даже делал небольшую типовую конфигурацию. Но, после открытия удобных инструментов вроде dh-virtualenv появилось желание упростить прежнюю процедуру до простой установки debian-пакета, в связи с чем появился новый репозиторий в GitHub – sentry-server.

Шаблон для debian-пакетов, использующих virtualenv

Так как уже несколько раз, в том числе и по работе, столкнулся с задаче завернуть django-проект в установочный пакет для debian и, т.к. хотелось сделать это хорошо и с использованием virtualenv, то потратил некоторое время и собрал на github шаблон для создания таких пакетов. После разворачивания и небольшой правки Makefile остаётся только перенести свой проект в папку project, быстренько глянуть инструкцию, чтобы убедиться, что ничего не забыто, и запустить make builddeb.

Настраиваем sentry с virtualenv и uwsgi

UPD: для debian-систем появилась возможность упростить порядок инсталляции и сделать её более изолированной и удобной для управления: см. здесь.

В предыщуем посте я описал свой рецепт установки django + virtualenv + uwsgi. Сегодня настраивал под свои проекты новую версию Sentry для протоколирования ошибок и описываю шаги, которые специфичны для неё:

Continue reading Настраиваем sentry с virtualenv и uwsgi

Aptana IDE

В поисках путей оптимизации работы за новым ноутбуком заново обратился к выбору подходящей IDE, универсальной как для python так и для php. Думал уже дать ещё раз шанс IDEA, но вспомнил про то, как когда-то смотрел Aptana IDE, которая тогда показалась немного сырой (года этак пол назад). Но то-ли экосистема новой ОС делает своё дело, то-ли в самой Aptana произошли существенные обновления, но установленная версия показалась очень приятной в использовании и настройке. Работа с git из коробки (а сам git можно поставить из проекта git-osx-installer), subversion добавляется с помощью плагина под Eclipse (как и всё остальное нестандартное). А главное — наконец-то приятная тема оформления с тёмным фоном окна редактирования!

Экспорт-импорт данных django-cms

Приводил сегодня в порядок базу данных одного проекта на django-cms и в ходе этого процесса решил перенести накопившиеся данные в новую БД, инициализированную с нуля и с успешно прогнанными миграциями. И, т.к в документации об этом не было ни слова, пришлось искать решение, и наткнуться на пару ошибок, после которых удалось создать готовый рецепт:

  • Первым делом переносим данные из таблицы auth_user, например, средствами БД;
  • Далее делаем два файла с данными. Так нужно, чтобы избежать проблемы с ключами в таблице cms_placeholder (IntegrityError: duplicate key value violates unique constraint “cms_placeholder_pkey”), которые например описаны в рассылке django-cms:

    ./manage.py dumpdata --indent=2 cms.placeholder > initial_data.cms.01.json

    ./manage.py dumpdata --indent=2 cms.cmsplugin cms.page cms.pagemoderatorstate cms.pageuser \
    cms.title picture snippet text (сюда-же впишем и остальные плагины) > initial_data.cms.02.json

  • И теперь загружаем полученные данные в новую БД:

    ./manage.py loaddata initial_data.cms.01.json
    ./manage.py loaddata initial_data.cms.02.json

Wi-Fi в Ubuntu 11.04

После установки свежей Ubuntu 11.04 (Natty Narwhal) на свой Ideapad U165 обнаружил, что Wi-Fi теперь не включается, даже если включить галочку «Беспроводные соединения» в Network Manager. Полдня было убито на копание в форумах, чтобы вытащить работающий рецепт для устройств broadcom с идентификатором 14e4:4727 (BCM4313): достаточно запретить модуль acer-wmi


modprobe -r acer-wmi

И после этого включить его в /etc/modprobe.d/blacklist.conf, чтобы этот поганец не мешался после перезагрузки.

django-cms, mptt и get_ancestors

Почему-то поисковики плохо выводят на решение проблемы с django-cms, когда, скажем, после обновления, попытка выполнить любую команду через manage.py приводит к ошибке:

File "/usr/local/lib/python2.6/dist-packages/publisher/mptt_support.py", line 142, in install_mptt 
    attrs[method_name] = getattr(mptt_models, method_name) 
AttributeError: 'module' object has no attribute 'get_ancestors'

Решение на самом деле простое: в django-cms есть уже встроенный модуль mptt. Но, если ставить через pip, то он устанавливает django-mptt, который естественно оказывается приоритетнее и несовместимым. Выход один: удалять django-mptt сразу после установки. Ну и использовать virtualenv, если есть необходимость в свежей версии django-mptt.

Дополнение: в django-cms версии 2.2 обещают прекратить эту порочную практику и нормально работать с django-mptt. Так-что ждём 🙂

Успел за трендом

Вот и я оказался среди прочих, кто завёл себе профиль на github. В качестве пробного шара выложил туда модуль доставки ЕМС России для Satchmo (интернет-магазин на Django). Модуль обкатан и используется в нашем велоодежном проекте и может пригодится тем, кто смотрит в сторону python для своего магазина в сети. Всё-таки пока для России Satchmo не слишком готов.