Sphinx. Установка PHP расширения pecl-sphinx

Программирование 29.06.2009

sphinx-pecl-sphinx

Как я и обещал в статье «Sphinx. Установка, настройка и использование поискового движка», расскажу как поставить расширение для PHP, дабы не инклудить файл «sphinxapi.php».

Сначала соберем «libsphinxclient»:

# fetch http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
# tar -xzf sphinx-0.9.8.1.tar.gz
# cd sphinx-0.9.8.1
# chmod -R 777 *
# cd ./api/libsphinxclient/
# ./buildconf.sh
# ./configure && make install

Теперь установим PECL-расширение:

# cd sphinx-0.9.8.1/api/libsphinxclient/
# pecl install sphinx

Когда спросит про «libsphinxclient», просто согласитесь с умолчанием, так как вы в том же каталоге где собирали «libsphinxclient», то он сам подцепится.

После установки, надо прописать модуль в «php.ini» или в «php/extensions.ini»:

# echo "extension=sphinx.so" >> /usr/local/etc/php/extensions.ini
# cat /usr/local/etc/php/extensions.ini

Получится что-то вроде:

extension=mbstring.so
extension=simplexml.so
extension=spl.so
extension=mysql.so
....
extension=sphinx.so

Перезагружаем индейца и в бой! :)

# apachectl restart

Sphinx и MySQL. Установка и использование движка SphinxSE

Базы данных, Операционные системы 26.06.2009

mysql-sphinxse

В продолжение темы о Sphinx, расскажу о SphinxSE, это движок для MySQL, который будет работать со Sphinx индексами непосредственно из MySQL.

Что такое SphinxSE?

Движок SphinxSE не хранит данные сам, а является звеном, которое позволяет серверу MySQL общаться с «searchd», запускать поисковые запросы и получать результаты поиска. Вся индексация и поиск происходит за пределами MySQL.

SphinxSE может быть собран только под MySQL 5.x используя архитектуру плагинов, которая не поддерживается в MySQL 4.x.

SphinxSE позволяет:

  • Легко портировать MySQL FTS (full-text search) приложения в Sphinx;
  • Использовать Sphinx, где невозможно использовать API, например если нет API для какого-то языка;
  • Оптимизировать добавленные Sphinx'ом результаты обработки на стороне MySQL, например: JOIN'ить результаты поиска с другими таблицами MySQL, добавлять дополнительную фильтрацию данных на стороне MySQL и т.д.

Установка SphinxSE

Ставить будем из сорцов и на FreeBSD 6.3.

Сначала скачаем дистрибутивы:

# fetch http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
# fetch http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.34.tar.gz

Скачать MySQL: http://downloads.mysql.com/archives.php?p=mysql-5.1&o=other
Скачать Sphinx: http://www.sphinxsearch.com/downloads.html

Обратите внимание, в download-листе Sphinx есть пункт «MySQL 5.0.45 with SphinxSE 0.9.8» и из ссылки «mysql-5.0.45-sphinxse-0.9.8-win32.zip» следует что это только для Win32.

Теперь, разархивируем:

# tar -xzf mysql-5.1.34.tar.gz
# tar -xzf sphinx-0.9.8.1.tar.gz

Скопируем сорцы SphinxSE в каталог распакованного нами MySQL:

# cp -R sphinx-0.9.8.1/mysqlse mysql-5.1.34/storage/sphinx

Запускаем «autorun.sh» для пересборки сорцов:

# cd mysql-5.1.34
# sh BUILD/autorun.sh

Установим дополнительные движки, в том числе и Sphinx:

# ./configure --with-plugins=sphinx,innobase,archive,blackhole
# make && make install

Читать полностью »

Subversion. Автоматическое обновление проекта при помощи хуков

Базы данных, Инструменты 25.06.2009

subversion-hooks

В большинстве случаев, при разработке веб-проекта требуется автоматически обновлять рабочую версию, на помощь на приходят свн-хуки!

Начнем с того, что у нас есть веб-проект и нам необходимо создать для него репозиторий, как это сделать я рассказывал в статье «FreeBSD. Установка и настройка Subversion».

Далее, мы будем обновлять наш проект только через репозиторий!

Подготовка проекта

Сначала сделаем импорт веб-проекта в репозиторий:

# svn import /_project_ file:///svn/repos/_project_

Теперь удалим все файлы проекта (не забывайте делать бекапы на всякий случай), и сделаем чекаут:

# cd /_project
# rm -rf *
# svn checkout file:///svn/repos/_project_

Hooks

Хуки срабатывают на разные события Subversion, вот некоторые из них:

  • start-commit — запускается до начала транзакции, может быть использован для проверки прав.
  • pre-commit — запускается в конце транзакции, но до commit, часто используется для валидации данных, например для проверки не пустых лог-собщений.
  • post-commit — запускается после транзакции, может быть использовано для отправки e-mail или для резервирования хранилища.
  • pre-revprop-change — запускается до изменений в ревизии, могут быть использованы для проверки доступа.
  • post-revprop-change — запускается после изменений в ревизии, могут быть использованы для отправки e-mail или для резервирования изменений.

Есть еще «post-lock», «post-unlock», «pre-lock» и «pre-unlock», как видно из названий он срабатывают при блокировке. Я не буду их разбирать, потомучто они у меня интереса пока не вызвали.

Читать полностью »

Плагин для WordPress — Яндекс.Фотки 2.0

Wordpress и плагины, Блоггерам 19.06.2009

yandex-fotki-20

Наконец-то я собрался с силами и переписал плагин «Яндекс.Фотки»! В новой версии все переписано буквально с нуля и работает на основе «API Яндекс.Фоток», поэтому версия именуется 2.0.

Для работы с AtomPub («API Яндекс.Фоток» работает по этой технологии) использую библиотеку SimpleXML.

Возможности

  • Выводить все фотографии пользователя
  • Выводить фотографии в выбранном вами альбоме
  • Как и ранее можно указывать количество результатов выдачи, но теперь НЕ ограничено 20-ю
  • Выводить названия фотографий
  • Указывать размер превью фотографии

Требования

  • PHP5
  • SimpleXML (в PHP5 по умолчанию установлен)


Добавил плагин в каталог сайта MyWordPress. Также попробовал залить на официальный сайт WordPress, но к сожалению запарился читать инструкции, может как-нибудь позже добавлю.

Что не вошло в релиз, но планируется

  1. Вывод всех альбомов пользователя (вам это надо?)
  2. Выводить количество фотографий в альбоме и комментариев для фотографии
  3. Просматривать защищенные приватностью фотографии (требуется ввод пароля)
  4. Просмотр фотографий с помощью «lightbox» (посоветуйте что-нибудь на его роль, желательно что-нибудь нативное для WordPress)
  5. Кеширование результатов выдачи, чтобы лишний раз не обращаться к «Яндексу» за фотографиями (посоветуйте средства кеширования, желательно нативные для WordPress)
  6. Шорттеги, для вставки галереи или фотографии в пост (Примеры: [yf]album_1234[/yf] — галерея, [yf]photo_1234[/yf] — фотография)

Скриншоты

Панель управления опциями

Результат вывода фотографий


Использование

<h2>Яндекс.Фотки</h2>
<ul>
    <?php yandexFotki(); ?>
</ul>



Я себе уже установил новую версию и все работает замечательно, если заметите баги, то пишите о них в комментарии.

Скачать плагин: Яндекс.Фотки 2.0

P.S. Так же создал отдельную страницу http://adw0rd.ru/ext/wp-yandex-fotki/ там будут публиковаться свежие версии, однако пост в блог тоже будет.

FreeBSD. No route to host

Операционные системы 17.06.2009

freebsd_logo

Сообщение “No route to host” появляются, если система не в состоянии доставить пакеты к хосту назначения. Это может случиться, если не определен маршрут по умолчанию, или кабель не подключен. Проверьте вывод команды netstat -rn и убедитесь, что к соответствующему хосту есть работающий маршрут.

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

# ping example.com
ping: sendto: no route to host

Проверяем маршруты:

# netstat -r

Если не находим «default»-маршрут, то добавляем сами:

# route add default 10.20.30.1

, где 10.20.30.1 — ваш шлюз (gateway).

Или вписываем в /etc/rc.conf

defaultrouter="10.20.30.1"

Для того, чтобы маршрут прописывался при старте системы.

Руководство FreeBSD: Сетевые шлюзы и маршруты