Иногда мне кажется, что в экосистеме Ruby on Rails есть проклятое место: встраиваемые движки для ведения блогов. Это особенно мило наблюдать в свете существования бесконечного количества скринкастов «блог на Rails за 10 минут».
Судя по всему, любая попытка создать какое-либо решение для блогов в виде подключаемого модуля приводит, как правило, к одному из двух исходов: либо человека утомляет эта работа и он уходит заниматься более насущными вещами, либо движок превращается в монстра, способного сожрать любое Rails-приложение ещё до момента его инициализации.
Некоторое время назад, когда я работал в «АБАК-ПРЕСС», руководство повелело внести в милый сайтик LookMart.ru весьма модную нынче «фишечку» — пользовательские блоги (на данный момент эта функциональность находится в активной разработке). Меньше всего нам хотелось изобретать велосипед и городить очевидные вагоны из контроллеров с моделями, но после небольшой разведки пришлось смириться и сделать всё самостоятельно. Почему?
Потому что мы не нашли подходящего решения, увы. Основные ограничения накладывались постановкой задачи и особенностями кодовой базы нашего портала:
Governor — это плагин для Ruby on Rails 3.0, позволяющий практически безболезненно включить функциональность блогов в Web-приложение.
Плагин полностью покрыт тестами при помощи RSpec и имеет минимум зависимостей времени выполнения: всего лишь ActiveRecord и will_paginate. Методы аутентификации и авторизации пользователей специфицируются путём переопределения соответствующих хелперов.
Немного напрягает, что последний коммит в него датирован 27 ноября прошлого года, а поддержка Rails 3.1 до сих пор не анонсирована.
В экосистеме Ruby on Rails определённую популярность имеют «комбайны» вроде Locomotive, которые могут быть встроены в Web-приложение вполне тривиальным образом (как engine) и использованы для построения пользовательских блогов.
Возникает вопрос целесообразности встраивания таких решений: эти CMS умеют слишком многое. Реализованная в них функциональность может, в лучшем случае, дублировать существующие наработки и порой портить архитектурную идиллию. Не каждый человек готов с этим смириться.
Популярность этих решений сказывается как на темпах развития проектов, так и на качестве покрытия кода тестами. Не стоит забывать, что Locomotive использует только MongoDB, что может устраивать далеко не всех.
Существует также и более современный аналог движка Governor — Kublog.
Kublog очень похож на Governor по своей сути, однако заточен под несколько более «модерновые» инструменты: Ruby on Rails ≥ 3.1 и carrierware (аналог paperclip).
Судя по тому, что последний коммит датирован 21 ноября 2011 года, и лишь частичному наличию тестов для кода, возникает гипотеза, что между количеством блоговых плагинов для Rails и временем года существует определённая зависимость.
Несмотря на низкую интенсивность разработки и практически отсутствующий интерес к проекту со стороны сообщества, он используется компанией-разработчиком в продакшне и, вероятно, показывает весьма неплохие результаты.
Встраиваемый движок JABE появился сравнительно недавно и уже сейчас имеет количество зависимостей сравнимое с неплохой CMS: Rails ≥ 3.1, ActiveRecord, kaminari, devise, simple_form, и так далее.
Покрытие тестами отсутствует как факт, несмотря на весьма внушающую уважение версию 0.7.0, до которой движок смог дорасти с декабря прошлого года.
Таким образом, хочется задать риторический вопрос: неужели исходная задача настолько неактуальна для сообщества Ruby on Rails, что никто публично не пытается заниматься её решением?
Осмелюсь предположить, что задача хоть и является актуальной, но при разработке движка блогов всегда есть уточняющие требования, из-за чего составлять решение для (пользовательских) блогов на рельсах в общем виде — сизифов труд.
Судя по всему, любая попытка создать какое-либо решение для блогов в виде подключаемого модуля приводит, как правило, к одному из двух исходов: либо человека утомляет эта работа и он уходит заниматься более насущными вещами, либо движок превращается в монстра, способного сожрать любое Rails-приложение ещё до момента его инициализации.
Некоторое время назад, когда я работал в «АБАК-ПРЕСС», руководство повелело внести в милый сайтик LookMart.ru весьма модную нынче «фишечку» — пользовательские блоги (на данный момент эта функциональность находится в активной разработке). Меньше всего нам хотелось изобретать велосипед и городить очевидные вагоны из контроллеров с моделями, но после небольшой разведки пришлось смириться и сделать всё самостоятельно. Почему?
Потому что мы не нашли подходящего решения, увы. Основные ограничения накладывались постановкой задачи и особенностями кодовой базы нашего портала:
- необходимо отслеживать все изменения slug у записей в блогах и не допускать «битых» ссылок при редактировании метаданных;
- у нас имеется очень хитрая система рубрик, которая должна быть привязана к записям в блогах;
- ряд модификаций в системе маршрутизации несколько усложняет внедрение плагинов с собственными роутами;
- реализована не менее хитрая система регионов, которая очень тесно интегрирована с маршрутами и характеристиками постов.
Описание аналогов
Governor
Governor — это плагин для Ruby on Rails 3.0, позволяющий практически безболезненно включить функциональность блогов в Web-приложение.
Плагин полностью покрыт тестами при помощи RSpec и имеет минимум зависимостей времени выполнения: всего лишь ActiveRecord и will_paginate. Методы аутентификации и авторизации пользователей специфицируются путём переопределения соответствующих хелперов.
Немного напрягает, что последний коммит в него датирован 27 ноября прошлого года, а поддержка Rails 3.1 до сих пор не анонсирована.
Locomotive
В экосистеме Ruby on Rails определённую популярность имеют «комбайны» вроде Locomotive, которые могут быть встроены в Web-приложение вполне тривиальным образом (как engine) и использованы для построения пользовательских блогов.
Возникает вопрос целесообразности встраивания таких решений: эти CMS умеют слишком многое. Реализованная в них функциональность может, в лучшем случае, дублировать существующие наработки и порой портить архитектурную идиллию. Не каждый человек готов с этим смириться.
Популярность этих решений сказывается как на темпах развития проектов, так и на качестве покрытия кода тестами. Не стоит забывать, что Locomotive использует только MongoDB, что может устраивать далеко не всех.
Kublog
Существует также и более современный аналог движка Governor — Kublog.
Kublog очень похож на Governor по своей сути, однако заточен под несколько более «модерновые» инструменты: Ruby on Rails ≥ 3.1 и carrierware (аналог paperclip).
Судя по тому, что последний коммит датирован 21 ноября 2011 года, и лишь частичному наличию тестов для кода, возникает гипотеза, что между количеством блоговых плагинов для Rails и временем года существует определённая зависимость.
Несмотря на низкую интенсивность разработки и практически отсутствующий интерес к проекту со стороны сообщества, он используется компанией-разработчиком в продакшне и, вероятно, показывает весьма неплохие результаты.
JABE
Встраиваемый движок JABE появился сравнительно недавно и уже сейчас имеет количество зависимостей сравнимое с неплохой CMS: Rails ≥ 3.1, ActiveRecord, kaminari, devise, simple_form, и так далее.
Покрытие тестами отсутствует как факт, несмотря на весьма внушающую уважение версию 0.7.0, до которой движок смог дорасти с декабря прошлого года.
Сводная таблица
Аналог | Легковесность | Популярность | Ограничения | Покрытие тестами |
---|---|---|---|---|
Governor | да | 83 watchers, 5 forks, last commit at 27.11.2011 | ActiveRecord | хорошее |
Locomotive | нет | 947 watchers, 218 forks, last commit at 09.02.2012 | mongoid | хорошее |
Kublog | да | 3 watchers, 1 fork, last commit at 21.11.2011 | ActiveRecord | среднее |
JABE | да | 14 watchers, 3 forks, last commit at 02.02.2012 | ActiveRecord | нет |
Осмелюсь предположить, что задача хоть и является актуальной, но при разработке движка блогов всегда есть уточняющие требования, из-за чего составлять решение для (пользовательских) блогов на рельсах в общем виде — сизифов труд.