Friday, August 26, 2011

SVN. Перенос репозитория

1. Делаем дамп старого проекта
#svnadmin dump myrepo > myrepo.dump
2. Разворачиваем дамп
#svnadmin create myrepo
#svnadmin load myrepo < myrepo.dump

Wednesday, August 24, 2011

Django + JSON

Потребовалось недавно передавать обработанные данные в Django с помощью json. Меньше слов, покажу как эти данные передавать ниже
from django.http import HttpResponse
from django.utils import simplejson
response = {'result': 'true'}
json = simplejson.dumps(response, ensure_ascii=False)
return HttpResponse(json, mimetype='application/json')

Wednesday, August 10, 2011

Django+nginx

  Всем привет. Сегодня будем ставить высоконагруженный веб-сервер на слабенькое железо. Итак начнем. Что нам нужно будет для работы.


Предварительная работа над системой.
1. Я ставлю на Ubuntu Server 11.04 (вы можете легко адаптировать под свою ОС)
2. Пользователь с нужными правами. Мой пользователь - kir
3. Ему необходимо передать рутовые права приблизительно вот так:
  • заходим в файл /etc/sudoers
  • выставляем такие права kir ALL=(ALL) ALL
4. Устанавливаем django. Описано тут
5. Устанавливаем nginx
#sudo apt-get install nginx
6. Устанавливаем дополнительные библиотеки для python
#sudo apt-get install build-essential python-dev python-setuptools
7. Наконец устанавливаем daemotools
#sudo apt-get install daemontools
8. Создадим папку /etc/service выполнив следующую команду
#sudo mkdir /etc/service

Теперь переходим к настройке daemontools.
1. Создаем настроечный файл для daemontools с названием /etc/init/svscanboot со следующим содержимым
start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /usr/bin/svscanboot
2. Запустим daemontools
#sudo initctl start svscanboot

Настройка виртуальной среды для Python
1. Мы будем использовать virtualenv для создания изолированной среды для нашего приложения
#sudo easy_install virtualenv
2. Теперь настроим новую виртуальную среду
#mkdir ~/virtualenvs
#virtualenv ~/virtualenvs/mysite
3. Начнем использовать нашу виртуальную среду и установим pip для удобства инсталляции питоновских пакетов
#source ~/virtualenvs/mysite/bin/activate
#easy_install pip
4. Установим flup. Это требования Django для того, чтобы была возможность запускать fcgi через команду runfcg
#pip install flup
5. Для того, чтобы спользовать адаптеры базы данных, графические библиотеки или xml парсеры, инсталлированные по системному пути Питона, мы должны убедиться, что они доступны из нашей виртуальной среды. Для этого мы добавляем .pth файл в директорию виртуальной среды site-packages
#echo "/usr/lib/python2.7/dist-packages/" > ~/virtualenvs/mysite/lib/python2.7/site-packages/fix.pth
6. Теперь любым удобным способом перетащите свой проект Django в директорию ~/virtualenvs/mysite
7. Доставим несколько библиотек для дальнейшей оптимизации
#pip install simplejson python-memcached

Связываем Daemontools c FastCGI
1. Daemontools будет смотреть во ве поддиректории /etc/service и в каждой из них он будет искать исполняемый файл run. Итак, создаем mysite-директорию
#sudo mkdir /etc/service/mysite
2. Теперь делаем скрипт /etc/service/mysite/run, который будет запускать fastcgi-сервер
#!/usr/bin/env bash
source /home/kir/virtualenvs/mysite/bin/activate
cd /home/kir/mysite
exec envuidgid kir python manage.py runfcgi method=threaded host=127.0.0.1 port=8080 pidfile=mysite.pid minspare=4 maxspare=30 daemonize=false
3. Сделаем созданный скрипт исполняемым
#sudo chmod +x /etc/service/mysite/run

Настраиваем nginx для работы с нашим сервером
1. Для начала изменим файл /etc/nginx/fastcgi_params на такое содержание
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
2. Теперь создадим настройку под наш хост /etc/nginx/sites-available/mysite
server {
    listen 80;
    server_name mysite;
    access_log /var/log/nginx/mysite.access.log;
    location /media {
        autoindex on;
        index index.html;
        root /home/mysite/mysite;
        break;    }
   
    location / {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:8080;
        break;
    }
}
3. Теперь подключим его через symlink
#sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite
4. Теперь перезапустим сайт, чтобы все настройки вступили в силу
#sudo /etc/init.d/nginx restart

Радуемся результату. Удачи!

Tuesday, June 21, 2011

Java. printStackTrace to String

Решил написать только код. Думаю по нему все понятно сразу

StringWriter writerStr = new StringWriter();
PrintWriter myPrinter = new PrintWriter(writerStr);
ex.printStackTrace(myPrinter);
String stackStr = writerStr.toString());

Friday, March 25, 2011

Error under version control

Частенько выпадает сообщение, когда хочу закоммитить уже коммиченные файлы в другую директорию
[dir] is already under version control
Чтобы исправить данную ошибку необходимо просто удалить все старые настроечные файлы .svn
Для этого необходимо выполнить комманду
find ./ -name ".svn"|xargs rm -Rf

Monday, January 10, 2011

Grub2. Загрузка ОС

1. В параметре GRUB_DEFAULT (/etc/default/grub) ставим ту ОС, которую нужно загружать по умолчанию
2. Посмотреть список всех ОС можно в файле /boot/grub/grub.cfg
3. Обновляем sudo update-grub

Sunday, December 12, 2010

const char * to LPCWSTR

Когда только начинал изучать WinAPI на VisualStudio 2010, меня постоянно мучила ошибка преобразования строк. А именно сообщение об ошибке
a value of type "const char *" cannot be assigned to an entity of type "LPCWSTR" 
Перечитал кучу форумов и перепробовал кучу способов обхода этой проблемы, пока случайно не зашел на VS2010 Tips & Triks, где объяснялась ситуация возникновения этой ошибки. А решается это очень просто
Project -> Properties -> Configuration Properties -> General
И в поле Character Set меняет параметр Use Unicode Character Set на Use Multi-Byte Character Set

Friday, December 10, 2010

Apache и мониторинг виртуальных хостов

1. Включаем модуль
$ sudo a2enmod status
$ apache2ctl graceful


2. Редактируем файл мониторинга /etc/apache2/mods-available/status.conf
ExtendedStatus On

SetHandler server-status
#Order deny,allow
#Deny from all
#Allow from localhost ip6-localhost


3. Бывает так, что при переходе на какой-нибудь сайт появляется ошибка "You don’t have permission to access /server-status on this server". Чтобы исправить эту ошибку нужно заменить строчку в файле /etc/hosts
127.0.0.1 localhost.localdomain localhost
на 127.0.0.1 localhost servername

MySQL и кодировка

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

1. Открыть файл любыми доступными способами 
/etc/mysql/my.cnf

2. Добавить следующие строки
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8

3. Перезапустить mysql 
/etc/init.d/mysql restart

Wednesday, December 8, 2010

MySQL dump

1. Делаем бэкап базы
mysqldump -u[Логин] -p[пароль] [базаданных] > mybase.sql

2. Записываем бэкап в другой базе
mysql -u[Логин] -p[пароль] [базаданных] < mybase.sql

Wednesday, November 17, 2010

Backup SharePoint

Чтобы сделать бекап, выполняем команду
stsadm –o backup –url http://myurl -filename file.backup
Затем восстанавливаем
stsadm –o restore –url http://myurl -filename file.backup

Saturday, October 30, 2010

VBox и запуск без графического режима

У меня на виртуальной машине стоит web-server, svn-server, а также несколько самописных небольших серверов для тестов. В результате появилась идея запускать все это без запуска графической среды VBox'a. Такая возможность есть. Команда такова
VBoxHeadless.exe --startvm "freebsd"


Если вы хотите остановить запущенную машину, но необходимо
VBoxManage.exe controlvm "freebsd" poweroff

Monday, October 25, 2010

Самый простой декоратор

def print_value(func):
def wrapper(*args, **kwargs):
output = func(*args, **kwargs)
print output
return wrapper

@print_value
def return1():
return 1

@print_value
def return_tuple():
return (1, 2, 3)

Sunday, October 10, 2010

Lighttpd + Python

Собственно самый простой способ заставить python работать как cgi в lighttpd это выполнить 3 комманды

sudo ln -s /etc/lighttpd/conf-available/10-cgi.conf /etc/lighttpd/conf-enabled/

Добавить в файл /etc/lighttpd/lighttpd.conf строчку
cgi.assign = (“.py” => “/usr/bin/python”)

И перезапустить сервер
sudo /etc/init.d/lighttpd restart

Также, проверить работу можно вот таким простым скриптом

#!/usr/bin/env python

print "Content-type: text/html"
print
print "Hello world!"

Friday, October 8, 2010

CSRF token missing or incorrect

Начиная с версии Django 1.2 при работе с post-методами вылезает постоянно такая вот ошибка
CSRF token missing or incorrect

Это ошибка описана в документации, а также предложено несколько способов решения этой проблемы. Самый простой и рекомендуемый - это в теле формы написать такой блок
{% csrf_token %}