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

Тема в разделе "Сервисы", создана пользователем ooprizrakoo, 4 июн 2008.

Статус темы:
Закрыта.
  1. ooprizrakoo

    ooprizrakoo Постоялец

    Регистр.:
    18 фев 2007
    Сообщения:
    84
    Симпатии:
    133
    Доброго всем.

    Дмитрий Роот, ведущий программист проекта "Диптаун" ( 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) находятся в аттаче.

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

    Вложения:

    • sape_ruby.zip
      Размер файла:
      7,3 КБ
      Просмотров:
      11
    xtrim нравится это.
Статус темы:
Закрыта.