вторник, 13 декабря 2011 г.
Django: value too long for type character varying(50)
Попал на непонятно откуда вылезающую ошибку "value too long for type character varying(50)". Оказалось - в Meta у модели слишком длинное название было (verbose_plural). В следствии чего django не мог создать права для app.
среда, 2 ноября 2011 г.
Munin-node-win32. Баг с внешними плагинами.
История такова: очень не хотелось писать плагин для Win-сервера, однако пришлось. Хитрый плагин считывает лог веб-сервера и в результате я получаю графики времени генерации страниц сайта. Я отслеживал некоторые тяжелые страницы.
Однако всё испортил баг в munin-node-win32!
А именно - сервером мунина не считывался конфиг плагина из-за перевода строки windows-way.
Ужас. Пришлось поставить Visual C++, взять с github'а исходники, исправить их, скомпилировать... И вот он - http://github.com/funvit/munin-node-win32
Исполняемый файл - в каталоге Release. Всё работает, проверил в win 2003 server.
Однако всё испортил баг в munin-node-win32!
А именно - сервером мунина не считывался конфиг плагина из-за перевода строки windows-way.
Ужас. Пришлось поставить Visual C++, взять с github'а исходники, исправить их, скомпилировать... И вот он - http://github.com/funvit/munin-node-win32
Исполняемый файл - в каталоге Release. Всё работает, проверил в win 2003 server.
среда, 22 июня 2011 г.
CentOS. MySQL - ошибка при запуске (481)
В очередной раз поднимая очередной сервер, попал на ошибку запуска mysql. Ругался, что файл переводов ошибок содержит только 480 строк, а нужно - 481.
Как оказалось, установилась версия 5.0.92 из репозитория CentALT.
Так вот, если отключить репозиторий (я просто файл репозитория убрал) - то ставится 5.0.77, которая нормально запускается!
Как оказалось, установилась версия 5.0.92 из репозитория CentALT.
Так вот, если отключить репозиторий (я просто файл репозитория убрал) - то ставится 5.0.77, которая нормально запускается!
вторник, 21 июня 2011 г.
CentOS 5. Установка nginx
Сперва подключить репозиторий
потом установить
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
потом установить
yum install nginx
среда, 8 июня 2011 г.
Gitolite - добавление пользователя
Добавить пользователя или другое рабочее место (например - лаптоп) - легко:
1. Сгенерировать rsa ключ
2. скопировать его на сервер в папку tmp
3. переключиться на пользователя, на котором успановлен gitolite (у меня - git)
sudo su - gitolite
4. добавить ключь gl-setup /tmp/user.pub
все!
1. Сгенерировать rsa ключ
2. скопировать его на сервер в папку tmp
3. переключиться на пользователя, на котором успановлен gitolite (у меня - git)
sudo su - gitolite
4. добавить ключь gl-setup /tmp/user.pub
все!
вторник, 17 мая 2011 г.
Linux. Добавление и включение скрипта в init.d
Проверка скрипта:
Добавление:
Включить:
chkconfig --list имя_скрипта
Добавление:
chkconfig --add имя_скрипта
Включить:
chkconfig имя_скрипта on
пятница, 6 мая 2011 г.
Django + MongoDB
Рабочая связка
* django-nonrel* django-mongodb-engine
* djangotoolbox (setup.py mongo-engine поставит сам)
* permission-backend-nonrel (вернет группы и права в систему доступа)
Работает админка. У моделей можно использовать OneToOneField и ManyToManyField.
Обязательно в settings.py добавить:
* djangotoolbox
* permission_backend_nonrel
Модели пишутся стандартно.
Минус - у моделей всегда id=ObjectId. Не смотрел, возможно ли это изменить.
Локализация
Русская локализация работает только если локаль в settings = ru.Не забывать:
* создать каталог locale в корне проекта
* django-admin.py makemessages -l ru (создает файл для переводов)
* django-admin.py compilemessages
Начальная установка проекта
django-admin.py startproject mySiteправка settings.py
django-admin.py syncdb
зайти через консоль монго в django_site и выбрать id сайта ( db.django_site.findOne() ) - он нужен в settings (пример: "4dc3b2ef8ddf87288d00001d").
четверг, 24 марта 2011 г.
MongoDB обновление множества записей
Обнаружил неприятную особенность. При частом использовании:
монго плодит кучу под-процессов (и соединений) и сильно лочит коллекцию. Что приводит к 90% локу и зависанию скрипта.
Скрипт - в цикле обновляет поля.
Помогает использование вместо мулти-обновления - обновления каждой записи по одной (под-цикл в скрипте).
update( query={Field:{$in:[x],$nin:[y]}}, update={$addToSet:{Field:z}}, multi=true }
монго плодит кучу под-процессов (и соединений) и сильно лочит коллекцию. Что приводит к 90% локу и зависанию скрипта.
Скрипт - в цикле обновляет поля.
Помогает использование вместо мулти-обновления - обновления каждой записи по одной (под-цикл в скрипте).
Gitolite - удобно!
Очень советую использовать на сервере с git-репозиториями gitolite. Инструкция. Обязательно ставить под пользователем git.
Gitosis у меня не заработал - при push выдавал неизлечимую ошибку.
Gitosis у меня не заработал - при push выдавал неизлечимую ошибку.
четверг, 10 февраля 2011 г.
Clodo.ru - не оправдывает моих надежд
Вчера (9.02.2011) была последняя капля. LA достиг 10 и машина умерла. В панели весело отображалось 2ТБ из 15 ГБ диска. Это интересно как???
Кроме того, когда я поднял минимум памяти с 512 до 1,5 ГБ и перезапустил сервер - ничего не изменилось. Как было 512 так и осталось (т.е. выше никак не росло).
Сегодня опять мой скрипт довел сервер до la 8.
Срочно уползаю на selectel.ru! Там la нормально держится на 3-4 и память честно выделяется...
Кроме того, когда я поднял минимум памяти с 512 до 1,5 ГБ и перезапустил сервер - ничего не изменилось. Как было 512 так и осталось (т.е. выше никак не росло).
Сегодня опять мой скрипт довел сервер до la 8.
Срочно уползаю на selectel.ru! Там la нормально держится на 3-4 и память честно выделяется...
среда, 9 февраля 2011 г.
Clodo.ru - обязательно ставьте fail2ban.
Сегодня слегка озадачился - а не атакуют ли мой сервер (который вообще то никак не фигурирует в интернете)?
Ого!!! Срочно ставлю fail2ban!
Шаги такие:
1. поставить пакет (yum install fail2ban)
2. настроить конфиг (ssh jail, проверьте правильность имени файла лога!)
3. прописать емаил для рута (sudo vi /etc/aliases)
4. включить fail2ban (/etc/init.d/fail2ban start)
5. добавить его в init.d (chkconfig fail2ban on)
P.S.: проверьте - установлен ли sendmail (/usr/sbin/sendmail)!
sudo cat /var/log/secure* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort | uniq -c 232 Feb 1 800 Feb 2 15 Feb 4 15 Feb 7 238 Feb 8
Ого!!! Срочно ставлю fail2ban!
Шаги такие:
1. поставить пакет (yum install fail2ban)
2. настроить конфиг (ssh jail, проверьте правильность имени файла лога!)
3. прописать емаил для рута (sudo vi /etc/aliases)
4. включить fail2ban (/etc/init.d/fail2ban start)
5. добавить его в init.d (chkconfig fail2ban on)
P.S.: проверьте - установлен ли sendmail (/usr/sbin/sendmail)!
четверг, 3 февраля 2011 г.
YML и СЕОшные развлечения
По работе столкнулся с интересной ситуацией - многие интернет магазины используют трюк с подменой символов в названии товаров. Т.е. есть слово "cумка". Они заменяют букву "с" на английскую "c".
Зачем? Да вот какой-то гений понял, что это даст больше уникального контента для поискового робота. Ладно. Всё по-умному - заменяют только в названии товара, а в описании обязательно дублируют слово в правильном виде.
Кому интересно - вбейте в поисковики (советую гугл) "сумка" (и замените первую букву). Результат вас поразит.
Но всё бы хорошо, но эти горе-сеошники совсем не понимают, что они портят контент сайта. Почему? Да потому что, когда интернет-магазин вдруг решит работать с Яндекс-Маркетом... Да, да! Название товара то - уникальное... И кривое.
Хотя возможно яндекс это знает и заменяет обратно. Но вот мне дают xml-файл. Я его обрабатываю и вижу битые слова. И мне приходится как то это решать!
П.С.: Намного проще было бы сео-умникам пнуть своих программистов, что бы те написали ма-а-аленький скрипт...
Зачем? Да вот какой-то гений понял, что это даст больше уникального контента для поискового робота. Ладно. Всё по-умному - заменяют только в названии товара, а в описании обязательно дублируют слово в правильном виде.
Кому интересно - вбейте в поисковики (советую гугл) "сумка" (и замените первую букву). Результат вас поразит.
Но всё бы хорошо, но эти горе-сеошники совсем не понимают, что они портят контент сайта. Почему? Да потому что, когда интернет-магазин вдруг решит работать с Яндекс-Маркетом... Да, да! Название товара то - уникальное... И кривое.
Хотя возможно яндекс это знает и заменяет обратно. Но вот мне дают xml-файл. Я его обрабатываю и вижу битые слова. И мне приходится как то это решать!
П.С.: Намного проще было бы сео-умникам пнуть своих программистов, что бы те написали ма-а-аленький скрипт...
понедельник, 17 января 2011 г.
MongoDB. Реализация транзакции между двумя коллекциями.
Привычной SQL-транзакции в mongodb нет. Однако есть атомарные команды для изменения документа (одного!). Что позволяет реализовать двойную бух-запись.
Пример: есть коллекция организаций и журнал сумм на списание с организаций.
Получается такая реализация:
Вместо выполнения всей sql-транзакции - в коллекцию журнала добавляется запись о списании суммы с организации. Всё. Остальное - делает робот-скрипт (в этом примере - он работает строго в один поток!)
Что делает робот:
1. Находит не обработанную запись в коллекции журнала
2. В коллекции организаций у соответствующей организации за одну команду изменяется баланс и лог-поле (типа LogId + TimeStamp) Важно!: предварительно нужно проверить - не совпадает ли идентификатор журнальной записи с LogId. Если совпало - то значит скрипт запущен после сбоя, и уменьшать баланс не надо!
3. В коллекции журнала записи добавляется флаг "Обработана"=true
На 2 и 3 шаге нужно проверять getLastError(safe-mode) - если произошла ошибка - можно повторить шаг (только не бесконечно, а, например, 10 раз. если все плохо - то нужно как-то оповестить админа или программиста).
Это - очень упрощенный вариант. Только для понятия логики.
Пример: есть коллекция организаций и журнал сумм на списание с организаций.
Получается такая реализация:
Вместо выполнения всей sql-транзакции - в коллекцию журнала добавляется запись о списании суммы с организации. Всё. Остальное - делает робот-скрипт (в этом примере - он работает строго в один поток!)
Что делает робот:
1. Находит не обработанную запись в коллекции журнала
2. В коллекции организаций у соответствующей организации за одну команду изменяется баланс и лог-поле (типа LogId + TimeStamp) Важно!: предварительно нужно проверить - не совпадает ли идентификатор журнальной записи с LogId. Если совпало - то значит скрипт запущен после сбоя, и уменьшать баланс не надо!
3. В коллекции журнала записи добавляется флаг "Обработана"=true
На 2 и 3 шаге нужно проверять getLastError(safe-mode) - если произошла ошибка - можно повторить шаг (только не бесконечно, а, например, 10 раз. если все плохо - то нужно как-то оповестить админа или программиста).
Это - очень упрощенный вариант. Только для понятия логики.
пятница, 14 января 2011 г.
MongoDB + Munin = графики
На сайте mongodb оказалась не работающая (для меня) инструкция. Покопав гугл нашел решение:
Плагины нужно скопировать в /usr/share/munin/plugins
и сделать симлинки по пути /etc/munin/plugins
потом проверить конфиг ноды:
перезапустить ноду:
Вот теперь на веб-странице графиков появилась группа mongodb.
P.S.: https://github.com/erh/mongo-munin/
Плагины нужно скопировать в /usr/share/munin/plugins
и сделать симлинки по пути /etc/munin/plugins
потом проверить конфиг ноды:
munin-node-configure ... mongo_btree | yes | mongo_conn | yes | mongo_lock | yes | mongo_mem | yes | mongo_ops | yes | ...
перезапустить ноду:
sudo /etc/init.d/munin-node restart
Вот теперь на веб-странице графиков появилась группа mongodb.
P.S.: https://github.com/erh/mongo-munin/
Подписаться на:
Сообщения (Atom)