среда, 14 апреля 2010 г.

IIS6+ nginx на одной машине

В связи с хайлоадом (перегрузкой) сервера с IIS6, решил посмотреть, что будет, если закрыть iis nginx`ом. И статичные файлы отдавать тоже nginx`ом. Однако что то не срослось - и iis не сбавил темпов загрузки процессора. Nginx вообще его не кушал.

пятница, 2 апреля 2010 г.

nginx под win32 как сервис

Nginx - штука гордая. Особенно под windows. Запускать нужно через start, чтоб отдельный процесс запустился. Озадачился запускать nginx как сервис. Проще всего через утилитку cygrunsrv.exe.

Тут тоже свои шаманства:
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">&#60;!-- я коммент --&#62;</xsl:text>

Омг! И скрипты... тоже... нужно мутировать...

среда, 3 марта 2010 г.

Python 2.6 в CentOS5

Подсмотрено тут.

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-базой на питоне. Основная проблема - сообщение типа


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-функции
emit(doc._id, doc);

т.к. при вызове view на жестком диске создается индекс-файл, который будет содержать значения doc._id и doc!

UPDADE: doc - т.е. будут все поля документа.

Возвращайте только новые, просчитанные данные. Ибо есть ключик include_docs=true, при наличии которого БД отдаст кроме того, что в emit ещё и сами документы!

среда, 3 февраля 2010 г.

CouchDB | Простенький скрипт для keep-alive

CouchDB запускается как фоновый процесс. Но он не умеет подниматься в случае ошибки.
Вот пример простого скрипта, который через 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

Скрипт можно усложнить - например, после рестарта проверить - запустился ли. Если нет - отсылать письмо админу :-)