Нами разработан модуль Sape для сайтов на Ruby / Ruby on Rails.

ooprizrakoo
На сайте с 28.11.2006
Offline
67
2974

Доброго всем.

Дмитрий Роот, ведущий программист проекта "Диптаун" ( www.deeptown.org ), написал полноценный модуль для отображения ссылок Sape для сайтов, работающих на Ruby on Rails (и не только).

1. Информация.

Данный модуль портирован из "официального" perl-модуля sape.

Модуль в первую очередь предназначен для использования с фреймворком Ruby on Rails, но его можно использовать и в обычном CGI приложении. В отличии от существующих на данный момент решений, этот модуль полностью написан на Ruby и не требует запуска PHP приложения. Это должно работать значительно быстрее.

2. Быстрый старт на Ruby on Rails

- поместите файл sape.rb в директорию /lib Вашего проекта;

- в корне проекта создайте каталог sape, в нем - подкаталог с идентификатором пользователя sape (длинное шестнадцатеричное число) и убедитесь, что сервер имеет право записи в этот каталог. В нем будет храниться кеш ссылок;

- в app/controllers/application.rb (в класс ApplicationController) добавьте

следующий код:

before_filter :sape_init

def sape_init

@sape = Sape.from_request('123abc...идентификатор пользователя', request)

end

Первый параметр функции from_request - это тот же идентификатор пользователя sape. Для чистоты кода его стоит вынести в файл конфигурации;

- в ERB-шаблоне в том месте, где должны выводиться ссылки (скорее всего это будет шаблон из layouts) вставьте код

<%= @sape.links %>

Эта функция также может принимать в качестве параметра количество ссылок для отображения, например

<%= @sape.links(3) %>

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

В случае, если возникнет какая-то ошибка, ее описание будет отображено в виде HTML-комментария в том месте, где должны быть ссылки.

3. Список функций

Модуль экспортирует единственный класс - Sape - который отвечает за отображение ссылок sape и обновление списка этих ссылок с сервера sape.

Его использование состоит из двух этапов - инициализация и получение текста ссылок.

Инициализация производится одним из двух конструкторов:

- Sape.from_env(user_id, [options])

- Sape.from_request(user_id, request, [options])

Первый параметр обоих методов - это идентификатор пользователя sape.

Метод from_env инициализирует объект при помощи переменных среды, устанавливаемых сервером. Он предназначен для использования в CGI приложениях.

Для Rails предпочтительнее использовать второй метод - from_request, который вторым параметром принимает объект AbstractRequest.

Последний параметр - это необязательный хеш опций, которые могут включать:

:host -- имя хоста (например, myserver.com)

:uri -- URI запроса (например, /some/script.rb)

:remote_ip -- IP адрес, с которого произведен запрос;

:filename -- имя файла кеша ссылок. Этот файл должен быть доступен для записи скриптом.

Умолчания:

- для Rails - "#{RAILS_ROOT}/sape/#{user_id}/links.db"

- для CGI - "#{ENV['DOCUMENT_ROOT']}/#{user_id}/links.db"

:charset -- кодировка, в которой требуется отображать ссылки. По-умолчанию, utf-8;

:server -- адрес сервера sape, с которого обновлять ссылки;

:timeout -- период обновления ссылок в секундах (по-умолчанию 1 час).

Вы также можете указать nil - в этом случае ссылки не будут автоматически обновляться с сервера. См. ниже.

За отображение ссылок отвечают два метода:

- links( [count] )

- get_links( [count] )

Оба метода принимают в качестве параметра количество ссылок для отображения и возвращают HTML-текст ссылок. Параметр не является обязательным; по-умолчанию возвращаются все ссылки.

Отличие этих функций заключается в способе обработки ошибок.

Функция links в случае возникновения ошибки возвращает текст HTML-комментария следующего вида:

<!-- SAPE.ru error: ... error description ... -->

Функция get_links в случае возникновения ошибки кидает исключение.

4. Ручное обновление ссылок

При использовании sape существует одна небольшая проблема. Она заключается в том, что обновление ссылок с сервера sape - это долгая процедура. Сервер sape может быть перегружен или недоступен по каким-то причинам; в этом случае обновление кеша ссылок может затянуться на несколько секунд (до срабатывания таймаута соединения).

Если такое поведение недопустимо - можно обновлять кеш ссылок вручную, т.е. отдельным скриптом.

Чтобы отключить автоматическое обновление, передайте параметр :timeout => nil в последнем параметре конструктора, например:

@sape = Sape.from_request(SAPE_USER_ID, request, :timeout => nil)

Обновить ссылки вручную можно вызовом метода update() класса Sape.

Осталось только написать небольшой скрипт, который будет создавать объект Sape и вызвать его метод update, и добавить этот скрипт в расписание cron (например, в /etc/cron/cron.hourly).

5. Информация об авторе

Автор модуля - Дмитрий Роот

E-mail адрес droot@deeptown.org

Пожалуйста, сообщайте обо всех ошибках и дополнениях на данный e-mail адрес.

6. Если кто-то захочет каким-то материальным способом поблагодарить разработчика, это можно сделать переводом любой суммы на Webmoney-кошелек: Z819056126132 , или зарегистрировавшись в системе по ссылке: http://www.sape.ru/r.2f99c56437.php.

Наш модуль распространяется бесплатно, по принципу "As Is" ("как есть"), его работоспособность успешно протестирована, и он работает на нескольких RoR-сайтах.

Сам файл модуля, а так же файл readme.txt с инструкцией по установке, и файл READMEUTF8 (в кодировке UTF-8) находятся в аттаче.

Удачи и успеха, кому пригодится.

zip sape_ruby.zip
Сайт «Курт Воннегут по-русски» (http://vonnegut.ru)
dkameleon
На сайте с 09.12.2005
Offline
386
#1

Теперь ссылки в Сапе может продавать даже LinkFeed.ru! 😂

А вообще молодцы :)

Хоть я и очень сомневаюсь в большой востребованности. Ещё не встречал, чтоб для ГСов задействовали Руби :)

Дизайн интерьера (http://balabukha.com/)
ooprizrakoo
На сайте с 28.11.2006
Offline
67
#2

dkameleon, ну, ведь не только ГС-ы сапу на себя вешают, но и нормальные :)

Для них в первую очередь скрипт и предназначен.

Евген
На сайте с 28.02.2004
Offline
1051
#3
ooprizrakoo:
dkameleon, ну, ведь не только ГС-ы сапу на себя вешают, но и нормальные

угу. знаю разработку подключения под Lotus Domino. если что обращайтесь - подскажу контакт.

А под Руби один коллега полгода назад все разрабатывал, так и не знаю сделал он или нет. скину ему топик в аську.

Арбитражишь? подними РОИ на 10-20% - бонусы на пополнение рекламных сетей (тм, мт, твк, твс) (https://eprofit.me/ru/partner?olymp)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий