ooprizrakoo
Постоялец
- Регистрация
- 18 Фев 2007
- Сообщения
- 84
- Реакции
- 145
- Автор темы
- #1
Доброго всем.
Дмитрий Роот, ведущий программист проекта "Диптаун" ( Для просмотра ссылки Войдиили Зарегистрируйся ), написал полноценный модуль для отображения ссылок 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 , или зарегистрировавшись в системе по ссылке: Для просмотра ссылки Войдиили Зарегистрируйся.
Наш модуль распространяется бесплатно, по принципу "As Is" ("как есть"), его работоспособность успешно протестирована, и он работает на нескольких RoR-сайтах.
Сам файл модуля, а так же файл readme.txt с инструкцией по установке, и файл READMEUTF8 (в кодировке UTF-8) находятся в аттаче.
Удачи и успеха, кому пригодится.
Дмитрий Роот, ведущий программист проекта "Диптаун" ( Для просмотра ссылки Войди
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 , или зарегистрировавшись в системе по ссылке: Для просмотра ссылки Войди
Наш модуль распространяется бесплатно, по принципу "As Is" ("как есть"), его работоспособность успешно протестирована, и он работает на нескольких RoR-сайтах.
Сам файл модуля, а так же файл readme.txt с инструкцией по установке, и файл READMEUTF8 (в кодировке UTF-8) находятся в аттаче.
Удачи и успеха, кому пригодится.