Иногда мне кажется, что в экосистеме Ruby on Rails есть проклятое место: встраиваемые движки для ведения блогов. Это особенно мило наблюдать в свете существования бесконечного количества скринкастов «блог на Rails за 10 минут».
Судя по всему, любая попытка создать какое-либо решение для блогов в виде подключаемого модуля приводит, как правило, к одному из двух исходов: либо человека утомляет эта работа и он уходит заниматься более насущными вещами, либо движок превращается в монстра, способного сожрать любое 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
нет
Таким образом, хочется задать риторический вопрос: неужели исходная задача настолько неактуальна для сообщества Ruby on Rails, что никто публично не пытается заниматься её решением?
Осмелюсь предположить, что задача хоть и является актуальной, но при разработке движка блогов всегда есть уточняющие требования, из-за чего составлять решение для (пользовательских) блогов на рельсах в общем виде — сизифов труд.