Pull to refresh

Встраиваемые движки пользовательских блогов для Ruby on Rails

Reading time3 min
Views3.2K
Иногда мне кажется, что в экосистеме 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, что никто публично не пытается заниматься её решением?

Осмелюсь предположить, что задача хоть и является актуальной, но при разработке движка блогов всегда есть уточняющие требования, из-за чего составлять решение для (пользовательских) блогов на рельсах в общем виде — сизифов труд.
Tags:
Hubs:
Total votes 26: ↑21 and ↓5+16
Comments14

Articles