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

HowTo Install typo on Red Hat EL3

Posted by Cooper Tue, 04 Jul 2006 10:52:00 GMT

Here is a typo installation guide based on the folowing: http://www.typosphere.org/trac/wiki/TypoOnFreebsd

1. Install Ruby 1.8.4

Download and install ruby from the stable release 1.8.4 http://www.ruby-lang.org/en/20020102.html

2. Install gems

$cd
$wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz
$tar xvzf rubygems-0.8.11.tgz
$cd rubygems-0.8.11
$ruby setup.rb

3. Install Rails

$gem update
$gem install rails --include-dependencies 

4. Download and install FastCGI Development Kit

$ wget fastcgi.com/dist/fcgi-2.4.0.tar.gz | tar xfz -
$ copy fcgi-2.4.0 /usr/local/src/fcgi-2.4.0
$ cd /usr/local/src/fcgi-2.4.0
$ ./configure
$ make
$ sudo make install

5. Install FCGI bindings for Ruby

$ sudo gem install fcgi

6. Download and Install typo

# /usr/sbin/adduser typo_user
# passwd typo_user 
$ svn checkout svn://leetsoft.com/typo/trunk typo
$ cp -R typo /home/typo_user/websites/www.mysite.com

7. Configuring Typo

Replace

/usr/bin/env ruby 

with

/usr/local/bin/ruby 

in

public/dispatch.fcgi
and
public/dispatch.rb
.

8. Database

8.1 Install Ruby/MySQL

(http://www.tmtm.org/en/mysql/ruby/)

8.2 Create database in MySQL

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;

Edit config/database.yml:

login: &login
  adapter: mysql
  host: localhost
  username: typo_user
  password: typo_password
  socket: /var/lib/mysql/mysql.sock
  encoding: utf8

development:
  database: typo_user_typo
  <<: *login

test:
  database: typo_user_typo
  <<: *login

production:
  database: typo_user_typo
  <<: *login

8.3 Update the database-schema

$rake migrate

9. Lighttpd

Download from http://www.lighttpd.net/download/lighttpd-1.4.11.tar.gz Extract to /usr/local/src/lighttpd-1.4.11

$ cd /usr/local/src/lighttpd-1.4.11
$ ./configure
$ make
$ su -
# make install
# exit

Copy config-file from /home/typo_user/websites/www.mysite.com/config to /etc/lighttpd/lighttpd.conf and then edit:

server.pid-file             = "/var/run/typo-typo_user.pid"
server.port                 = 3000
server.bind                 = "127.0.0.1"
#server.event-handler        = "freebsd-kqueue"
server.name                 = "www.mysite.com"

server.modules              = ( "mod_rewrite", "mod_fastcgi", "mod_accesslog" )
server.indexfiles           = ( "dispatch.fcgi" )
server.document-root        = "/home/typo_user/websites/www.mysite.com/public"
server.error-handler-404    = "/dispatch.fcgi"
server.errorlog             = "/home/typo_user/websites/www.mysite.com/log/error.log"
accesslog.filename          = "/home/typo_user/websites/www.mysite.com/log/access.log"

url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )

#### fastcgi module
fastcgi.server =  (
   ".fcgi" => (
        "typo" => (
               "min-procs" => 4,
               "max-procs" => 4,
               "socket" => "/home/typo_user/websites/www.mysite.com/tmp/typo-typo_user.socket",
               "bin-path" => "/home/typo_user/websites/www.mysite.com/public/dispatch.fcgi",
               "bin-environment" => ("RAILS_ENV" => "production" ),
               "idle-timeout" => 120
                )
           )

Copy /usr/local/src/lighttpd-1.4.11/doc/rc.lighttpd.redhat to /etc/rc.d/init.d/lighttpd. Replace the line

lighttpd=”/usr/sbin/lighttpd”

with

lighttpd=”/usr/local/sbin/lighttpd”

Start lighttpd server /etc/rc.d/init.d/lighttpd start

Posted in , ,  | Tags , , ,

Система резервного копирования на Ruby

Posted by Cooper Sun, 02 Jul 2006 19:35:00 GMT

Так сложилось, что возникла необходимость в продуманной системе резервного копирования для сохранения данных программы автоматизации складского учета КСУ. К данной backup system предъявлялись следующие требования:

  • регулярное сохранение (раз в неделю) всего объема информации (полный бэкап);
  • ежедневные инрементальные бэкапы для измененных за день данных;
  • создание информативных лог-файлов процесса бэкапа, позволяющих, в случае необходимости, воссстановить полную картину процесса резервного копирования;
  • использование архиватора для уменьшения дискового пространства;
  • использование языка Ruby (эта цель была вынесена только для того, чтобы на практике освоить основные приемы программирования на Ruby);
  • понятный и однозначный процесс воссстановления из резервной копии в случае необходимости;
  • использрование внешних носителей информации CD-RW с целью минимизировать риски от техногенных катастроф и стихийных бедствий.

В результате была реализована система, ядро которой написано на Ruby, с использованием архиватора pkzipc и системы записи на CD в реальном режиме времени InCD. Также можно посмотреть полное описание проекта. Для загрузки проект доступен отсюда

Posted in ,  | Tags , ,  | 1 comment