Наверняка уже многие счастливые обладатели сайтов, разработанных на php или html, установили и с удовольствием пользуются системой купли-продажи ссылок sape.ru. Поскольку мой блог использует Typo движок, написанный на Ruby on Rails, то конкретных инструкций по размещению sape-кода мне найти не удалось ни на форуме sape.ru, ни в Интернет. Поэтому пришлось провести небольшое исследование по способам интеграции Rails и PHP и затем реализовать на основе собранного материала Typo sidebar plug-in.
Первое, что я сделал, это вынес php-код для отображения ссылок, в отдельный файл с именем sape1.php. Этот файл был сохранен в директории /var/www/websites/mysite/public
Как показали первые эксперименты с sape, большая часть проблем с отображением ссылок продавцов была связана с тем, что невозможно определить внутри php-скрипта текущую страницу сайта или доменное имя. Поэтому далее в этом скрипте явно были прописаны параметры, в обычных условиях получаемые из контекста web-сервера: ‘request_uri’, ’host’. А также изменён параметр ’charset’ на UTF-8 в соответствии с используемой кодировкой страниц моего сайта. Значение ‘request_uri’ дополнительно преобразовывалось функцией urlencode() для корректной интерпретации символов кириллицы в URL.
Через административный интерфейс добавляем новый plug-in на sidebar. С появлением новых запросов на размещение в sape.ru:
… они появляются в sidebar области Typo блога:
Так что те, кто ещё не присоединился, в действии систему купли-продажи ссылок Sape.ru теперь и на Ruby On Rails сайтах.
* * UPDATE * *
описанная выше методика была протестирована на системе RedHat EL3 c PHP 4.3.2
Позже возникла необходимость перейти на PHP 5.1 и оказалось, что подход к интеграции php-sape клиента в этом случае немного отличается.
При запуске php-скрипта public/sape1.php из typo-окружения элемент массива $_GET[‘uri’] не инициализируется значением, в результате ссылки на странице не видны.
Для исправления ситуации вместо $_GET[‘uri’] нужно использовать $argv[1], также uri имеет уже закодированный вид, так что убираем строку с функцией urlencode():
<?php
define('_SAPE_USER', '999999999999999999999999999999999');
require_once('/var/www/websites/mysite/'._SAPE_USER.'/sape.php');
// replace $_GET[‘uri’] with $argv[1]
$o['request_uri'] = $argv[1];
// remove uri encoding
$o['host'] = 'cooper.ezlibrary.com';
$o['charset'] = 'UTF-8';
$sape = new SAPE_client($o);
unset($o);
echo $sape->return_links();
?>
А в typo-плагине откорректировать файл views/content.rhtml опустив название параметра uri и убрав ключ -q:
После выхода версии typo 4.1 тут же захотелось опробовать её в деле. В принципе, сам процесс обновления практически не отличался от предыдущего, добавился только 4-й пункт, из-за того что изменился адрес и способ доступа к svn-репозитарию проекта. Ещё одна вещь, которая бросилась в глаза после завершения обновления, это проблема с обработкой тэгов typo:code, typo:lightbox. Это только те теги, которые я заметил. Судя по , существуют и другие похожие проблемы. обещает разобраться с этим в релизе 4.1.1. Пока что пришлось для топовых постов поменять <typo:code> на <pre> а <typo:lightbox /> на <img />
Итак, сам процесс обновления описан ниже:
1) Останавливаем lighttpd:
/etc/init.d/lighttpd stop
2) Делаем backup сайта:
tar cfv cooper.ezlibrary.com_r1193.tar www.ezlibrary.com/*
gzip cooper.ezlibrary.com_r1193.tar
Где-то с конца прошлого года казалось, что проект вот-вот закончит свое существование. Об этом можно было судить потому, что разработка не велась несколько месяцев, официальный сайт проекта был недоступен в течение трёх месяцев без каких-либо официальных объяснений. Не была известна дата следующего официального релиза и, если говорить, в общем и целом - будущее проекта. На этом фоне многие приверженцы Typo начали переходить на Mephisto или другие blog-engines.
И вот, наконец, вышел очередной релиз Typo 4.1 , в котором реализовано несколько интересных вещей:
Поддержка Ruby on Rails 1.2.
Внесены функциональные и эргономические изменения в раздел администрирования блога (back office).
Добавлена поддержка интернационализации и локализации, используя localization плагин. Из поддерживаемых языков в данном релизе кроме английского языка доступен ещё французский.
Комментарии и trackbacks по умолчанию модерируемы.
Исправлено множество ошибок и проведено улучшение кода.
Поддержка RSS для тэгов и категорий.
Плагины используют механизм Rails plugin.
Typo 4.2 по прогнозам должно быть выпущено через два месяца, и судя по планам этот релиз будет выглядеть также впечатляюще:
Поддержка пользовательских ролей и процесса публикации статьи.
Возможность реализации на одной копии Typo множества блогов.
Переход с модуля Localization на Globalization для поддержки i18n и l10n.
Интеграция предложенных разработчиками патчей как плагинов.
Завершение улучшения административного раздела блога.
Прежде всего остановил демоны Lighttpd и httpd.
Затем сделал backup typo-директории и БД MySQL.
Попытался запустить update
$svn update
После небольшого раздумья svn выдает ошибку
svn: Working copy ‘log’ is missing or not locked
поиск в Google мало чем помог, – на все подобные вопросы в форумах либо нет ответа, либо примитивное “удалите директорию и попробуйте ещё раз”.
Ничего не остается делать, – скидываю log в другое место, пробую update, выдается то же самое, только уже svn не нравится директория ‘tmp/cache’. Перемещаю её вслед за log.
После этого svn update проходит без проблем. Возвращаю директории ‘tmp/cache’ и log обратно, дальше нужно обновить структуру БД:
После установки typo из trunk (rev.1055) к моему удивлению поддержка UNICODE работала нормально во всех проверенных мной режимах. Огорчило только то, что в “живом поиске” русские буквы трансформировались в последовательность типа %uxxxx (см. рисунок) и соответственно поиск на русском языке не работал.
После небольшого исследования оказалось, что “портит” кирилицу javascript функция escape(). Мной были рассмотрены разные варианты решения проблемы, в том числе использование класса UString из библиотеки .
Поиск по различным форумам/блогам дал свой рещзультат. Было найдено упоминание о похожей ситуации и рекомендовалось использовать encodeURIComponent() вместо escape(). И это действительно помогло.
Непосредственно лечить проблему надо так. В файле /app/views/shared/_search.rhtml строку
:with => "'q=' + escape($F('q'))" -%>
заменить на
:with => "'q=' + encodeURIComponent($F('q'))" -%>
до исправления
и после…
Также проверил на корректность работы Live Search с китайским языком, тест прошёл успешно:
mysql -p
create database typo_user_typo CHARACTER SET utf8;
grant all on typo_user_typo.* to 'typo_user'@'localhost' \
identified by 'typo_password';
flush privileges;
use typo_user_typo;
source /home/typo_user/websites/www.mysite.com/db/schema.mysql.sql;
Так сложилось, что возникла необходимость в продуманной системе резервного копирования для сохранения данных программы автоматизации складского учета КСУ. К данной backup system предъявлялись следующие требования:
регулярное сохранение (раз в неделю) всего объема информации (полный бэкап);
ежедневные инрементальные бэкапы для измененных за день данных;
создание информативных лог-файлов процесса бэкапа, позволяющих, в случае необходимости, воссстановить полную картину процесса резервного копирования;
использование архиватора для уменьшения дискового пространства;
использование языка Ruby (эта цель была вынесена только для того, чтобы на практике освоить основные приемы программирования на Ruby);
понятный и однозначный процесс воссстановления из резервной копии в случае необходимости;
использрование внешних носителей информации CD-RW с целью минимизировать риски от техногенных катастроф и стихийных бедствий.
В результате была реализована система, ядро которой написано на , с использованием архиватора pkzipc и системы записи на CD в реальном режиме времени InCD. Также можно посмотреть полное .
Для загрузки проект доступен