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 до последней 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