Autofaucets.ru - автоматический сборщик криптовалюты с кранов!

SAPE ON RAILS. Интеграция PHP-кода SAPE.RU в Ruby on Rails приложение.

Posted by Cooper Mon, 23 Apr 2007 12:52:00 GMT

Наверняка уже многие счастливые обладатели сайтов, разработанных на 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.


<?php
    define('_SAPE_USER', '999999999999999999999999999999999');
    require_once('/var/www/websites/mysite/'._SAPE_USER.'/sape.php');
    $o['request_uri'] = $_GET['uri'];
    $o['request_uri'] = str_replace('%2F', '/', urlencode($o['request_uri']) );
    $o['host']    = 'cooper.ezlibrary.com';
    $o['charset'] = 'UTF-8';
    $sape = new SAPE_client($o);
    unset($o);
    echo $sape->return_links();
?> 

После изменений в php-коде остается создать Sape sidebar plugin , где основная концепция реализована в файле content.rhtml:

<% command = '/usr/local/bin/php -q /var/www/websites/mysite/public/sape1.php uri=' + request.env["REQUEST_URI"].to_s %>
<%= `#{command}` %>

Через административный интерфейс добавляем новый 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:


<% command = '/usr/local/bin/php /var/www/websites/mysite/public/sape1.php ' + request.env["REQUEST_URI"].to_s %>
<%= `#{command}` %>

Posted in , , ,  | Tags , , , , ,  | 9 comments

TYPO 4.1. Миграция блога на новый релиз

Posted by Cooper Tue, 20 Mar 2007 22:27:00 GMT

После выхода версии typo 4.1 тут же захотелось опробовать её в деле. В принципе, сам процесс обновления практически не отличался от предыдущего, добавился только 4-й пункт, из-за того что изменился адрес и способ доступа к svn-репозитарию проекта. Ещё одна вещь, которая бросилась в глаза после завершения обновления, это проблема с обработкой тэгов typo:code, typo:lightbox. Это только те теги, которые я заметил. Судя по откликам , существуют и другие похожие проблемы. Frederic обещает разобраться с этим в релизе 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 

3) Бэкапируем базу MySQL:


 mysqldump typo_user_typo > /home/backups/mysql/cooper.ezlibrary.com-mysql-db-backup.sql

4) Переключаемся на новый typo svn-репозиторий (если ещё не переключились):


svn switch --relocate svn://typosphere.org/typo/trunk  http://svn.typosphere.org/typo/trunk

5) Обновляем текущую версию последним стабильным релизом 4.1 (revision 1389):

svn update -r 1389

6) Мигрируем на новую версию схемы базы данных:

rake migrate

7) Стартуем lighttpd:

/etc/init.d/lighttpd start

Posted in , ,  | Tags , , , , , , ,  | no comments

TYPO 4.1. Что нового?

Posted by Cooper Tue, 20 Mar 2007 09:13:00 GMT

Где-то с конца прошлого года казалось, что проект вот-вот закончит свое существование. Об этом можно было судить потому, что разработка не велась несколько месяцев, официальный сайт проекта был недоступен в течение трёх месяцев без каких-либо официальных объяснений. Не была известна дата следующего официального релиза и, если говорить, в общем и целом - будущее проекта. На этом фоне многие приверженцы 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.
  • Интеграция предложенных разработчиками патчей как плагинов.
  • Завершение улучшения административного раздела блога.
  • Перевод интерфейса на новые языки.

Posted in , ,  | Tags , , , , , ,  | no comments

Обновление Typo до последней trunk-ревизии (Revision: 1193)

Posted by Cooper Sun, 06 Aug 2006 19:34:00 GMT

Прежде всего остановил демоны 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 обратно, дальше нужно обновить структуру БД:

rake migrate

и всё! Можно стартовать Apache и Lighttpd.

Posted in , ,  | Tags , , , ,  | 1 comment

Typo Live Search. Решение проблемы поиска в кириллице

Posted by Cooper Tue, 01 Aug 2006 20:51:00 GMT

После установки typo из trunk (rev.1055) к моему удивлению поддержка UNICODE работала нормально во всех проверенных мной режимах. Огорчило только то, что в “живом поиске” русские буквы трансформировались в последовательность типа %uxxxx (см. рисунок) и соответственно поиск на русском языке не работал. После небольшого исследования оказалось, что “портит” кирилицу javascript функция escape(). Мной были рассмотрены разные варианты решения проблемы, в том числе использование класса UString из библиотеки ICU4R - ICU Unicode bindings for Ruby. Поиск по различным форумам/блогам дал свой рещзультат. Было найдено упоминание о похожей ситуации и рекомендовалось использовать encodeURIComponent() вместо escape(). И это действительно помогло. Непосредственно лечить проблему надо так. В файле /app/views/shared/_search.rhtml строку

 :with => "'q=' + escape($F('q'))" -%>

заменить на

 :with => "'q=' + encodeURIComponent($F('q'))" -%>

до исправления

и после…

Также проверил на корректность работы Live Search с китайским языком, тест прошёл успешно:

Posted in , ,  | Tags , , ,  | 2 comments