среда, 14 апреля 2010 г.
IIS6+ nginx на одной машине
В связи с хайлоадом (перегрузкой) сервера с IIS6, решил посмотреть, что будет, если закрыть iis nginx`ом. И статичные файлы отдавать тоже nginx`ом. Однако что то не срослось - и iis не сбавил темпов загрузки процессора. Nginx вообще его не кушал.
пятница, 2 апреля 2010 г.
nginx под win32 как сервис
Nginx - штука гордая. Особенно под windows. Запускать нужно через start, чтоб отдельный процесс запустился. Озадачился запускать nginx как сервис. Проще всего через утилитку cygrunsrv.exe.
Тут тоже свои шаманства:
Ключ --neverexits нужен, т.к. nginx "форкается" (порождает отдельный процесс).
Ключ -a нужен что бы передать путь, где находится сам nginx. Иначе не найдет куда писать логи.
А вот прикрутить ротацию логов пока не получилось, ругается, что не может найти какой-то файл (смутно думаю, что пид-файл)
reload_logs.bat:
Тут тоже свои шаманства:
cygrunsrv.exe --install nginx -p c:\nginx\nginx.exe --neverexits -a "-p c:\nginx"
Ключ --neverexits нужен, т.к. nginx "форкается" (порождает отдельный процесс).
Ключ -a нужен что бы передать путь, где находится сам nginx. Иначе не найдет куда писать логи.
А вот прикрутить ротацию логов пока не получилось, ругается, что не может найти какой-то файл (смутно думаю, что пид-файл)
reload_logs.bat:
cd c:\nginx\logs\ ren access.log access-%DATE%.log ren error.log error-%DATE%.log cd .. nginx -s reopen
четверг, 11 марта 2010 г.
XSL - ужас!
XSL - шаблоны. Вроде удобно, понятно. Циклы, проверки, подгрузка шаблонов. Но... как сделать обычный HTML-комментарий? Шаблонизатор съедает его!
Оказалось нужно
Омг! И скрипты... тоже... нужно мутировать...
Оказалось нужно
<!-- я коммент -->мутировать в ужас:
<xsl:text disable-output-escaping="yes"><!-- я коммент --></xsl:text>
Омг! И скрипты... тоже... нужно мутировать...
среда, 3 марта 2010 г.
Python 2.6 в CentOS5
Подсмотрено тут.
Теперь 2.6 версия вызывается через python2.6
Установка easy_install:
Соответственно вызывать через easy_install-2.6
wget http://python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2 tar -xjf Python-2.6.4.tar.bz2 cd Python-2.6.4 yum install -y gcc make zlib-devel bzip2-devel openssl-devel readline-devel sqlite-devel gdbm-devel ncurses-devel ./configure --prefix=/opt/python26 --with-zlib=/usr/include make make install ln -s /opt/python26/bin/python2.6 /usr/bin/python2.6 python2.6 -V
Теперь 2.6 версия вызывается через python2.6
Установка easy_install:
wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086 sh setuptools-0.6c11-py2.6.egg ln -s /opt/python26/bin/easy_install-2.6 /usr/bin/easy_install-2.6 easy_install-2.6 --help
Соответственно вызывать через easy_install-2.6
Настройка работы с MSSQL с линукса (CentOS 5)
Столкнулся с написанием скриптов для работы на линукс-сервере с MsSQL-базой на питоне. Основная проблема - сообщение типа
Как же так? Просто нужно настроить использование правильной версии драйвера.
Итак. Первое - запись о драйвере в /etc/odbcinst.ini
Второе - добавить запись о сервере в /etc/freetds.conf
Третье - добавить DSN-запись в /etc/odbc.ini
Теперь код для работы с бд выглядит так:
Успехов!
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (4004) (SQLExecDirectW)')
Как же так? Просто нужно настроить использование правильной версии драйвера.
Итак. Первое - запись о драйвере в /etc/odbcinst.ini
[FreeTDS] Description=TDS driver Driver=/usr/lib/libtdsodbc.so Setup=/usr/lib/libtdsS.so FileUsage=1
Второе - добавить запись о сервере в /etc/freetds.conf
[myServer] host=192.168.0.2 port=1433 tds version=8.0Особенно прошу учесть "табы" перед параметрами! У меня без них запись не срабатывала!
Третье - добавить DSN-запись в /etc/odbc.ini
[myDNS] Description=my dsn Driver=FreeTDS Database=my_db Servername=myServer
Теперь код для работы с бд выглядит так:
import pyodbc conn = pyodbc.connect("dsn=myDSN;UID=%s;PWD=%s;" % ('sa','pass')) cursor=conn.cursor() cursor.execute("select 'test' as x;") row=cursor.fetchone() if row: print row
Успехов!
четверг, 18 февраля 2010 г.
CouchDB | Тонкости map-функции
Никогда не пишите в map-функции
т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!
UPDADE: doc - т.е. будут все поля документа.
Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!
emit(doc._id, doc);
т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!
UPDADE: doc - т.е. будут все поля документа.
Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!
среда, 3 февраля 2010 г.
CouchDB | Простенький скрипт для keep-alive
CouchDB запускается как фоновый процесс. Но он не умеет подниматься в случае ошибки.
Вот пример простого скрипта, который через curl проверяет - активен ли процесс и если нет - перезапускает его:
Скрипт можно усложнить - например, после рестарта проверить - запустился ли. Если нет - отсылать письмо админу :-)
Вот пример простого скрипта, который через curl проверяет - активен ли процесс и если нет - перезапускает его:
#!/bin/bash echo "Checking, is CouchDB is alive..." #замените адрес на свой! ANSWER=$(curl http://192.168.0.5:5984 -s) if test $ANSWER then echo "CouchDB is alive!" else echo "Trying to restart..." /etc/init.d/couchdb restart fi
Скрипт можно усложнить - например, после рестарта проверить - запустился ли. Если нет - отсылать письмо админу :-)
Подписаться на:
Сообщения (Atom)