• 22Jun


    Чем меньше рутины мы привносим в свою работу, тем больше она может приносить удовольствия.

    Сегодня я расскажу про автоматизированный деплойтинг в python. Это значит одной командой я могу залить на все продакшен сервера файлы, обновить на нем необходимые компоненты и перегрузить веб сервер, и наблюдать за этим откинувшись на кресле и попивать кофеек.

    Я Вам расскажу про Fabric(На момент написания статьи 0.9.1 — бала последняя стабильная версия), наиболее подходящий для этого инструмент, который делает все описанное и даже больше через ssh.

    Про установку рассказывать особо нечего, pip отлично справляется с этим.

    В корень своего проекта я кладу fabfile.py, в этом файле и будут храниться все процедуры для работы с Fabric. Ниже приведу небольшой пример скрипта, который будет архивировать наш проект, заливать его на сервер и там разархивировать.

    1. from fabric.api import *
    2. env.hosts = ['oduvan@lyabah.com']
    3.  
    4. def deploy():
    5.     local('tar czf /tmp/my_project.tgz .')
    6.     put('/tmp/my_project.tgz', '/tmp/')
    7.     with cd('/home/oduvan/www/test_fab/'):
    8.         run('tar xzf /tmp/my_project.tgz')

    Если у Вас все получилось, а я очень надеюсь, что с этим хостом и именем пользователя ни у кого кроме меня получиться ничего не может (так что поменяйте свою строку конекта во второй строке), то вы можете увидеть что-то сильно напоминающее вот это:

    1. $ fab deploy
    2. [localhost] run: tar czf /tmp/my_project.tgz .
    3. Password for oduvan@lyabah.com:
    4. [oduvan@lyabah.com] put: /tmp/my_project.tgz -> /tmp/my_project.tgz
    5. [oduvan@lyabah.com] run: tar xzf /tmp/my_project.tgz
    6. [oduvan@lyabah.com] err: tar: ./fabfile.pyc: time stamp 2010-06-21 10:03:41 is 4.461083597 s in the future
    7. [oduvan@lyabah.com] err: tar: .: time stamp 2010-06-21 10:03:41 is 4.460804762 s in the future
    8.  
    9. Done.
    10. Disconnecting from lyabah.com… done.

    Само собой, пароль у вас спросят и его необходимо будет ввести, в конце статьи я выложу свой пароль к ссш, чтоб вы могли протестить работу.

    Кому лень вводить пароли могу добавить после второй сроки
    env.password = ‘oh_its_my_real_password’

    либо сгенерить себе файл с ссш ключом и путь к нему положить в
    env.key_filename — в отличие и пароля тут может быть передан массив ключей

    Но и этот код можно сократить. У Fabric есть contrib libs, одна из них project. Тут подробно каждую я описывать не буду, просто покажу пример с одной из них, дабы просто показать, что они есть

    1. from fabric.api import *
    2. from fabric.contrib.project import rsync_project
    3. env.hosts = ['oduvan@lyabah.com']
    4.  
    5. def deploy():
    6.     local('python manage.py test', capture=False)
    7.     rsync_project('/home/oduvan/www/test_fab/','.')

    как видите наш код сократился до одной команды, не считая команду для тестирования Django проекта, ведь если какая-то команда возвратит ошибочный статус, то выполнения прекратится, а значит если тесты не проходят загрузка не начинается. Дополнительный параметр capture говорит о том, что необходимо скрывать выходные данные команды, мы эту опцию отключаем.

    Вот основные команды, которые Вам необходимо знать, чтоб свободно пользоваться Fabric

    put — копировать файл с локальной машины на удаленную. Доп параметр mode — устанавливает права на файл, см chmod
    get — копировать файл с удаленной на локальную
    local — выполнить команду на локальной машине. Доп параметр capture — скрывать выходные данные, по умолчанию False
    run — выполнить команду на удаленной машине
    sudo — выполнить команду на удаленной машине через судо. Доп параметр user — указываем имя пользователя, под которым необходимо запустить команду

    Обратите внимание, что у нас есть команда sudo, а значит при необходимости, мы можем и сервак зарелоадить и вообще сделать любые админ вещи, главное, чтоб пользователь был в судоерсах.

    Для деплойтинга на несколько серверов, причем различной конфигурации, и роли – у Fabric тоже кое-что припасено.

    1. from fabric.api import *
    2. from fabric.contrib.project import rsync_project
    3. env.roledefs =  {'web':['oduvan@lyabah.com','oduvan@dev.lyabah.com'],
    4.         'db':['oduvan@db1.lyabah.com','oduvan@db2.lyabah.com'],
    5.         'media':['oduvan@media@lyabah.com'],
    6.         }
    7.  
    8. @roles('web')
    9. def deploy():
    10.     rsync_project('/home/oduvan/www/test_fab/','.')

    в этом примере заливка файлов будет идти сразу на 2 вебовых сервака. Как видите вы можете запланировать у себя роли отдельных серверов под БД, под медиа файл и т.д.

    кроме как декоратаром роль можно указывать и при запуске процедуры

    1. $ fab deploy -R web

    Иногда в момент или во время запуска необходимо передать данные скрипту.

    В момент запуска это делается через аргументы самой функции

    к примеру если у вас

    1. def deploy(arg1,arg2):
    2.     pass

    то эти 2 аргумента можно передать как

    1. $fab deploy:'HI','HO'
    2. $ fab deploy:'HI',arg2='HO'
    3. $ fab deploy:arg1='HI',arg2='HO'

    Либо спросить что-то во время работы функции у пользователя функцией
    prompt(text, key=None, default=”, validate=None)

    Задает вопрос пользователю с текстом text, если пользователь не вводит данные, то возвращает значение из default, предварительно отчищая его функцией validate, и возвращает как результат этой функции, если не передан key, иначе кладет значение в env[key]

    А теперь примеры функций деплойтинга из реальной жизни, которые вы можете написать и у себя в проекте:

    bounce_wsgi_procs — зарелоадить wsgi через touch в него
    deploy_media — загружаем только медиа файлы
    migrate — запускаем скрипт миграции через South
    update_repositories – обновляем репозитарии
    update_dependencies — устанавливаем зависимости
    reload_nginx — перегружаем nginx
    deploy — полная установка, последовательный запуск всех этих функций.

    Подводя итоги могу сказать, что Fabric должна стать musthave tool в разработке.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 05May

    Мда. Экономней надо кодить. Мой эклипс с pydev и аптаной на борту не кисло оперотивочки съедает, а это, с появлением в моей семье нового нетбучного малыша – стало большой проблемой. И начал я посматривать в сторону VIMа. Не очень хочется прощаться с приятными IDE-шными фичами.

    Вот то, что у меня получилось, после того, как я досмерти замучал глупыми вопросами весь pythonua@conference.jabber.ru

    Тут у нас слева по F5 мы видим все функции и классы открытого файла, а по F6 файловый менеджер.

    Вот архив с моими настройками и плагиными vim.zip. Тем, у кого вим вообще никак не настроен – можно просто взять и распоказать это в свой хоум.

    Так что начинаю потихоньку прывыкать к виму. Думаю по мере развития этого моего нового пристрастия – буду вам писать.

    Ну и на последок несколько ссылок в тему.

    Статья на тему интеграции питона и вима. Хоть и старая но еще вполне актуальна. Да и вообще этот блог про вим очень хорош. На нем же наткнулся на подборочку команд для работы с вимом. Ну а кому показалось, что это банальная и маленькая подборочка – вот эта вам разорвет мозг.

    Спасибо deepwalker за помощь и пояснения и за львиную часть его конфига вима :)

    PS: А еще есть GVIM тоже, только в окошке и с менюшками.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 03Feb

    detektiv( маленький копипаст с opennet)

    Определяем родителя (в Linux есть утилита ptree):

    1.     ps -lp <pid>

    Определяем какие файлы открыты:

    1.     fstat -p <pid> (freebsd)
    2.     lsof -p <pid>

    Определяем какие сетевые сокеты сопоставлены с процессом:

    1.     sockstat| grep <pid> (freebsd)
    2.     netstat -pan| grep <pid> (linux)
    3.     lsof -i -n|grep <pid>
    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]
  • 23Dec

    Да, я сегодня утром проснулся и решил накатить обновления убуны на свой ноут. Надеюсь продолжительная эпопея с подобными обновлениям Дебчика ( 1 , 2 , Убунта ) – не повторятся.

    Поэтому… пока оно накатывается… скиньте… у кого, какие были проблемы… чего мне ждать? ну кроме того, что у меня почти стопудово слетят проприетарные атишные драйвера.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]
  • 26Jun

    pc_and_boyИтак, случилось. То что мы так давно ждали. Войну между Дебианом унстабле и мной выграл я. Причем довольно хитро. Открыл словарик английского языка, перелеснул пару страничек, и задумался. Так вот почему unstable, так вот почему меня все так отговаривали. Скажу прямо. Глючит! Особенно, когда вы перепрыгиваете со стейбла на стейбл мега хитрым способом. С начало пол ночи safe-upgrade, а потом пол дня full-upgrade, а остальные пол дня: «А куда делся КДЕ?? а нет больше КДЕ, а кто это сделал..». И бог с ним с КДЕ, гном на самом деле не так уж и плох ( вобщем то с него то я вам и пишу).

    И тут начинается самая интересная часть любого рассказа. Кто во всем виноват? Я нашел. Гугу. Да… и не надо АндрюшенькО так удивляться. Ты! ДА…

    Короче, у чувака с голодухи ( т.к. я ему торчу кучу бобла за сервак) что-то там переклинило, однажды ночью, и решил обновить наш совместный убунту сервер. Обновил все без разбору. Я честно говоря боюсь себе представить, в какой момент и при каких обстоятельствах в этой маленькой голове промелькнула эта мысль. Но факт на лицо. Зашел на сервер и обновил. Причем очень фишечно, как ответственный чел, он обновил, проверил, что его долбаный, никому не нужный ФТИПИШНИК поднялся, и… (тут щас будет моя любимая часть) И ЛЕГ СПАТЬ!!! Красавец!!! Лучший!!! А нет, забыл, в этот приветственном сообщении консоли, когда как только логинишся оно выскакивает ( незнаю, как точно и професионально оно называется, но думаю вы меня поняли) написал, мол обновился, я крутой. Не знаю, почему наш герой из всего спектра мессенджеров, в которых я находился, в этот момент он выбрал именно этот.

    Утро. Саша просыпается. Чистит зубы. В перспективе намечает планы закончить одну фишку, исправить баги в другой. Легкий завтрак. Цем жену в лобик. Буду скоро. Загружается мой (ныне покойный ) Дебиан стейбл ( кстате в том же словарике посмотрел, что это реально лучше чем анстейбл ). Браузер. Лябах. Ком. Х..Й! Хм… странно… Сервак работает, захожу. Вижу бодренькое сообщение Гугу. Причина выяснилась сразу. Теперь у нас на серваке не python2.5, а 2.6. А значит что?? Правильно мальчики и девочки. Все лежит НА! Разве что дедуля постгрис еще стоял на свои двух. Лежал блог, лежал девелоп, даже долбаный трек и тот лежал. И я сразуже гугу написал ( перевод почти дословный ). «Андрей, друг мой, мне кажется, что ты поступил не совсем хорошо. Нельзя так поступать с товарищами». Ну, думаю где-то что-то такое я ему написал.

    Ну не буду томить вас подробностями о том, как же все-таки мы поднимали обратно все мое борохлишко. Надо заметить не без помощи Гугу. Выручил братан, спасибо!

    Когда осадочек злобы то осел малех. Жаба то и задавила. На девелопе то уже 2.6, а у меня 2.5. Хотя по сути то, от 2.5 до 2.6 реально 2 остановки на метро. Ан нет в репозитариях дебиана оно с пометкой красными букфками Експерементал. Еще больше апетиты разгорелись после прочтения ватзнью. Причем не то чтоб я сразу брошусь все это юзать у себя. Нет. Прото какоето внутреннее жлобское чуство, что у Ваньки из соседнего двора есть новые спици на велосипеде, а на моем хамере диски еще с прошлого сезона.

    Я в джабер, давай пилить пацанов на тему что мне для этого надо. Очень хочу, ну пожалуйсто!! Забегая вперед скажу, что потом у этих я спрашивал: «Ну и что мне теперь с этим делать, и как и что .. оно же… а как». Причем так весело иногда. Говорят: «А попробуй вот этот пакет установи». ПБЫШ, иксы вылетели не поднимаются, ребут, с пол пинка. Сети в КДЕ нет, и гнома захожу в хистори общения, видать увидели, что я вывалился через 2 мин после сообщения: «Добро пожаловать в unstable». До 4х ночи я мучался со всем этим, сам мучался, ноут свой мучал, и людей с чата. И знаете что в такие моменты думаешь? На кой Х тебе нужны были эти спици.

    Но просто один умный дядька сказал ( не исключено, что это я). Людям нужны сложности. И если их нет они начинают себе их выдумывать и искусственно создавать. Вот и меня наверно смущало очень, что мой милый дебчик мне больше полу года верой и правдой. А я же до этого как честный трудяга, Винду, раз в 3-4 месяца перебивал.

    На след день в принципе уже можно было работать. Разве что не было звука. Разве что виртуальная тачка с виндой больше не стартовала. Разве что половина иконок было с вопросиками, видять что то еще и со стилями приключилось. А так все работало. Единственное, что убивало, что python2.5. Нет, 2.6 стоял, но сим линка была на 2.5.

    Чем все закончилось. Да в общем то, еще не закончилось. Это пост я пишу из свежо установленной убунты. Я даже уже думаю написать серию статей, описывающие мое издевательства над линуксами ( а их уже было не мало ) , и какое нить звучное назвение. «Незнайка на луне»

    На сколько я понял. Убунта это типа форк дебиана. Причем анстейбла. Все знают, что у дебиана типа 2 релиза на поколения, и все плюшки реально лежат в анстейбле. Вот на всю эту нерешительность стариков плюнул Шаттлворт сделал форк с анстейбла исправил пару глюков, сделал прикольную заставку и бац родился Убунту. Потом пошел помыл руки, выпил чашечку кофе и полетел в космос (второй в мире человек). Вот такая она нелегкая жизнь милиардеров. Как оказалось, название он тоже взял не простое. Это какая то южноафриканская идеология, где особое внимание уделяется понятиям верности и лояльности в отношениях между людьми. Вот такая клевая штука википедия.

    И на последок, перед тем как я начну накатывать на убунту все свое борохло скажу, перефразировав классика Павла Волю: «Пофиг, что текст получился не связный, пофиг, что не о программировании или окло того, пофиг, что как всегда куча громотических ошибок. Главное, что этот блог читает мой Папа».

    Удачного всем для и выходных!

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 24Jun

    с утра воевал с проприетарными атишными драйверами.. точнее пытался их обновить… Так что щас вроде уже нормально работаю…

    Да… и моя винда по VirtualBox… вобщем она отслужила уже свое…

    Теперь сегодня ночью будем опять поднимать хозяйство… Все… надо работать…

    PS: Кто то из умных дядей сказал, что мы не можем жить без трудностей, и когда их недостает, что начинаем смами их выдумывать. Видел бы меня сейчас этот дядька, он бы меня сфоткал и в учебник. Нах мне нужен был этот унсейбл ))

    Всем удачного дня…

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 23Jun

    Захотелось, жадному Саше, поставить себе python2.6 на Debian lenny (stable). Но 2.6 у нас в разделе experimental так что… Перезжаем на unstable пообщался с красноглазыми админами, и парочку таки нашлось, которые так и живут, так что перекрестился, добавил в сорслис

    deb http://debian.org.ua/debian unstable main contrib non-free
    deb-src http://debian.org.ua/debian unstable main contrib non-free
    
    deb http://debian.org.ua/debian experimental main contrib non-free
    deb-src http://debian.org.ua/debian experimental main contrib non-free
    

    И вот что в ответ на апгрейд.

    1010 packages upgraded, 124 newly installed, 51 to remove and 264 not upgraded.
    Need to get 1077MB of archives. After unpacking 359MB will be used.
    Do you want to continue? [Y/n/?] Y
    

    Вобщем если я напишу следующий пост, значит у меня все ок. Так что держите пальци за меня!

    PS: как оказалось – по времени это займет часов 6. Так что уже утром узнаем, какого размера яйка у моего ноута.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 18Jun

    ipodsНаконец-то добрался до уже давно откладываемой задачи подружить iPod и Debian. А дружба должна была состоять в возможности синхронизировать мой iPod nano 4GB с Debian Lenny.

    Итак, юзать будет YamiPod. Выкачиваем бинарники под линукс, распаковываем, сошник отправляем в /usr/lib/, YamiPod запускаем. Увидели окно? Нет? Тогда что то пошло не так, и я не шарю что… обращайтесь в службу поддержки… чью?? iPod а конечно… и сразу с матами…

    Далее выбираем модель вашего айподца. Мой оказался в самом низу списка, и у же сразу с этого места я почувствовал какую то лажу… Так вот, если вы НЕ являетесь счастливым обладателем iPod nano 4GB, то вам очень повезло, и на этом все закончилось. А у нас неудачничков спросило FWID. Как оказалось, ответ у тех же ямиподов.

    1. sudo lsusb -v | grep -i Serial

    В получинном списке находим какую нить 16 значную строку — это и есть ваш айдишник. Вбиваем его в окошечко, после вас приблудина предупредит, что мол, если вы там ошиблись, то все пойдет по п…. Но мы и не на таких окошках Окей нажимали, так что давим…

    Все… мы внутри…. я давно привык, что Линукс и Юзабилити вместе никогда не ходят, но в этой проге разработчики, по моему, еще и стебались над пользователями, в хелпе им надо было написать: «Как пользоваться не знаем, прошаритесь, отпишитесь нам, нам тоже хочется поюзать».

    В общем через 3Ж(копирайт пиплнет) я как то свой многострадальный айподец синхронизировал, глючно, ну а что вы хотели. Да… и любителей русских букафок на вам музыкальном друге обломаю сразу.

    Всем спасибо.

    ЗЫ: Родилась теория, почему разрабочики под линух кладут на юзабилити — так меньше баг репортов разработчикам! По трем причинам. Первая — вы как миниму до половины фич не доберетесь, вторая — если вы добрались до второй половины фич и случился глюк, то после такого пути вы будите полностью уверены, что наверно оно гдето так и должно работать. И третья — после того, как вы пробрались через супер замысловатывые интерфейсы, после того как вы наткнулись на баг, и поняли, что что это не что иное, а именно баг — формочкой для баг репорта вы вообще побоитесь пользоваться.

    ЗЫЫ: но все равно, он же такой КЛЕВЫЙ!!!

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 02Apr


    Мои результаты мне давно известны,
    я только не знаю, как я к ним приду.
    К. Гаусс

    У меня плохая память, я конечно над ней работаю, но все же она плохая. Вообще все говорят, что это отличная отмазка, и снятие любой ответственности. По сути да, отмазка конечно супер, но отвечать все равно приедается. Собственно одна из причин того, что я завел этот блог и есть моя плохая память, т.к. до многих вещей необходимо доходить по нескольку раз. Пока ты просто не возьмёшь это и где то не запишеш. Главное не забывать в нем писать :)

    Доделал один сайт, и поиск к нему решил прикрутить не стандартный фуллтекст индекс из PostgreSQL а прицепить сюды енджин сторонний. Выбор мой остановился на Shinx ( сразу скажу, я не проводил углублённых анализов, на тему какой же движок заюзать. Это не надо пока. ) . Да, и есть маленькое затруднение в поиске инфы — я когда гуглил, то все время переципался через генератор документации для питона, с таким же названием.

    Так. От слов к делу.

    на форуме у них нашёл описание настройки под Debian. Так что ниже кратко:

    1. adduser –system –home /var/sphinx –uid 999 –disabled-password –disabled-login sphinx
    2.  
    3. mkdir /var/shpinx/bin
    4. mkdir /var/shpinx/etc
    5. mkdir /var/shpinx/log
    6. mkdir /var/shpinx/lib
    7. mkdir /var/shpinx/run
    8.  
    9. cd /tmp
    10. wget http://sphinxsearch.com/downloads/sphinx-0.9.7-rc2.tar.gz
    11. tar -xzvf sphinx-0.9.7-rc2.tar.gz
    12. cd sphinx-0.9.7-rc2
    13. ./configure –with-pgsql –with-pgsql-includes=/usr/include/postgresql/ –with-pgsql-lib=/usr/lib/postgresql/8.3/lib/
    14. make
    15.  
    16. wget http://www.klaus.gr/pub/sphinx
    17. mv sphinx /etc/init.d/
    18. chmod 755 /etc/init.d/sphinx
    19. ln -s /etc/init.d/sphinx /etc/rc2.d/S92sphinx
    20. chown -R sphinx /var/sphinx
    21. chmod -R 711 /var/sphinx/
    22. cd /var/spinx/etc
    23. cp -p sphinx.conf.dist sphinx.conf
    24. vim sphinx.conf

    Далее в секции searchd должно быть:

    1. pid_file = /var/sphinx/run/searchd.pid
    2. query_log = /var/sphinx/log/query.log
    3. log = /var/sphinx/log/searchd.log
    4. address = 127.0.0.1

    В секции index:

    1. path = /var/sphinx/lib/sphinx

    И запуск

    1. /etc/init.d/sphinx start

    На этом месте должен уже работать демон.

    Вот скрипт пепеиндексирования всех индексов

    1. /var/sphinx/bin/indexer –all –rotate –config /var/sphinx/etc/sphinx.conf

    Далее добавляем свой индекс:

    1. source board_posts
    2. {
    3.     type                = pgsql
    4.     sql_host            = 127.0.0.1
    5.     sql_user            = oduvan
    6.     sql_pass            = gravicapa
    7.     sql_db              = eliteboard
    8.     sql_port            =
    9.     sql_query_pre       =
    10.     sql_query_post      =
    11.     sql_query           = \
    12.         SELECT id, title, text, tags, location, to_contact, how_contact, owner_id, count_files_other, count_files_images, create_time FROM board_posts
    13.     sql_query_info      = SELECT * FROM `board_posts` WHERE `id` = $id
    14.     # ForeignKey's
    15.     sql_attr_uint       = owner_id
    16.     # DateField's and DateTimeField's
    17.     sql_attr_timestamp   = create_time
    18. }
    19.  
    20.  
    21. index board_posts
    22. {
    23.     source          = board_posts
    24.     path            = /var/sphinx/data/board_posts
    25.     docinfo         = extern
    26.     morphology      = none
    27.     stopwords       =
    28.     min_word_len    = 2
    29.     min_prefix_len  = 0
    30.     min_infix_len   = 0
    31.     charset_type    = utf-8
    32. }

    после этого создаем папку /var/sphinx/data/, переиндексируем, разрешим демону пользоваться нашими файлами

    1. chown -R sphinx /var/sphinx

    и передерним демона:

    1. /etc/init.d/sphinx restart

    Теперь надо рассказать джанге, как им надо пользоваться. Инсталим django-sphinx

    1. cd /tmp
    2. svn checkout http://django-sphinx.googlecode.com/svn/trunk/ django-sphinx
    3. cd django-sphinx
    4. sudo python setup.py install

    я ставил 0.9.8, так что в settings.py вашего проекта прописываем :

    SPHINX_API_VERSION = 0×113

    в моделе, по которой вы хотите вести поиск привязываем свойство, с указанием весов полей.

    1. class MyModel(models.Model):
    2.  search = SphinxSearch('board_posts',weights={
    3.                     'title': 100,
    4.                     'tags': 80,
    5.                     'description': 40,
    6.                 })

    Вот и все. Последнее — это выполнить поиск:

    1. queryset = MyModel.search.query('query')

    Вот так кратко, сухо, критикуйте!

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , , , ,

  • 05Feb

    virtual_networkВ прошлый раз я рассказывал, как можно «ненавязчиво» поставить VirtualBox, с WindowsXP на борту. Сейчас я хочу рассказать, как между ними можно настроить сеть.

    После установки виртуальной машины, у вас возможно будет небольшое недоумения по поводу того, что у вас будет на ней инет, если он будет на Хостой Оси, но по сети у вас не будет доступа к Хостовой Оси.

    Хотя, прежде чем заморачиваться на этом, подумайте, чего вам не хватает. У вас есть Shared Folders, что дает вам возможность обмениваться файлом, и инет, хоть и пока не понятно зачем, что вам еще надо?

    В моем случае, у меня флешке надо общаться с моим twisted сервером. И чтоб дебажить прям из среды разработки — надо было настроить сеть.

    Для доступа к сети на виртуалке я использовал Host Interface. Сразу скажу, что просто использовал первое решение, потому что именно под него я с начало нашел решение. Альтернативные типы соединений я не тестировал, если вдруг понадобится, то буду, и обязательно тут вам опишу.

    Итак. Host Interface предполагает использование устройства сетевой на Хостовой Оси ( в моем случае это Linux Debian lenny ). Мы создадим TAP устройство (виртуальная сетевая карта) , а потом мост с ним. Таким образом мы свяжем две наши оси.

    Вот такой скрипт у меня получился. Его я запускаю один раз, перед первым запуском моей виртуалки. Для его работы вам необходимо будет установить следующие пакеты: bridge-utils, uml-utilities

    Запускать от рута:

    1. #!/bin/sh
    2.  
    3. PATH=/sbin:/usr/bin:/bin:/usr/bin:/usr/sbin
    4. modprobe vboxdrv
    5.  
    6.  
    7. tunctl -t tap1 -u oduvan
    8. ip link set up dev tap1
    9.  
    10. brctl addbr br0
    11. brctl addif br0 tap1
    12.  
    13.  
    14. ip link set up dev br0
    15. ip addr add 192.168.88.1/24 dev br0
    16. ip route add 192.168.88.0/24 dev br0

    мы создали виртуальную сетевую tap1. Теперь ее необходимо ввести в настройках сети вашей виртуалки. Network=> Interface Name

    И запускаем виртуалку ( в моем случае это Windows XP SP2). Как только она запустится, заходим и устанавливаем настройки сети.
    192.168.88.2
    255.255.255.0
    192.168.88.1

    Все. Должно работать.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , , ,

« Previous Entries   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...