Статьи

Forem — движок форума Rails

Римский Форум, Рим

Вы когда-нибудь хотели создать форум для своего сайта? Есть множество решений, которые вы можете использовать для этой задачи. Однако как насчет форума, который интегрирован непосредственно в ваше приложение Rails? Тот, который можно изменить так, как вы хотите? Некоторое время назад я попытался ответить на тот же вопрос и обнаружил, что доступно только несколько жемчужин форума.

В поисках идеального форума

Прежде всего, есть измененный зверь . Раньше он был несколько популярен, однако в последний раз он обновлялся 5 лет назад и не поддерживает даже Rails 3.

Форум Monster, кажется, лучший вариант. Он предоставляет несколько функций и последний раз обновлялся в июле 2013 года. Однако он не поддерживается активно — в 2013 году было только три коммита, а в 2014 году никаких.

Я также нашел Savage Beast (похоже, что разработчики форумов любят монстров), но в последний раз он обновлялся в 2009 году, так что никаких кубиков.

Последнее решение, которое я нашел, было rBoard, но на его домашней странице сказано, что проект больше не поддерживается, так как он был передан Forem . Итак, я посетил страницу Forem и… EUREKA! Forem представлял собой полноценный форумный движок с активным (ну, не очень активным сообществом) и множеством полезных функций, в том числе:

  • Основные операции (создание / обновление / удаление категорий / форумов / тем)
  • Блокировка / закрепление / скрытие тем
  • Ответы и цитирование сообщений
  • Управление группами пользователей и назначение модераторов
  • Форматирование текста с помощью подключаемых форматеров, подсветка кода и возможность использовать смайлики
  • Интеграция с Gravatar
  • Тематика (с возможностью создания пользовательских тем )
  • Система разрешений
  • Перевод на разные языки
  • Возможность интеграции с RefineryCMS .

Forem был создан (и поддерживается в основном) Райаном Биггом и (на момент написания) насчитывал более 1300 коммитов.

В этой статье я покажу, как настроить Forem, и укажу на некоторые ошибки.

Рабочую демонстрацию можно найти по адресу http://sitepoint-forem.herokuapp.com .

Исходный код доступен на GitHub .

Некоторые Gotchas (как и обещали)

Что ж, я надеюсь, что вы в восторге от функций, предоставляемых Forem, и готовы начать интегрировать их в свое приложение. Однако, прежде чем мы туда доберемся, я вынужден предупредить вас о проблемах, с которыми вы можете столкнуться.

Прежде всего, следует понимать, что на данный момент Forem не имеет стабильной версии. Это активно
разработаны, поэтому могут быть добавлены новые функции, а старые могут быть удалены или изменены без предварительного уведомления. Имеется « Дорожная карта» , но сложно сказать, когда выйдет версия 1.0.

Кроме того, в Forem есть некоторые проблемы , которые еще не решены (некоторые из них довольно серьезные), и вы также можете обнаружить новые. Это, вероятно, означает, что Forem не подходит для начинающих (однако, я призываю вас попробовать).

Кроме того, в настоящее время Forem предоставляет только одну тему, основанную на Bootstrap. Эта тема частично нарушена, поэтому вам, безусловно, нужно настроить некоторые стили или использовать свою собственную тему.

Тем не менее, все эти проблемы могут быть решены, и Forem по-прежнему очень крутой форумный движок с большим количеством
полезные функции. Кроме того, на данный момент у него нет жизнеспособных альтернатив.

Подготовка приложения

Я буду использовать Rails 4.1.1, но вы можете реализовать то же решение с Rails 3

Хорошо, достаточно поболтать, давайте углубимся в кодирование. Начните с создания нового приложения без набора тестов по умолчанию:

rails new forum -T 

Вот список драгоценных камней, которые мы собираемся использовать для этой демонстрации:

 gem 'forem', github: "radar/forem", branch: "rails4" gem 'forem-bootstrap', github: "radar/forem-bootstrap" gem 'forem-redcarpet', github: "radar/forem-redcarpet" gem 'devise' 

Нам также понадобится гем для разбивки на страницы, вы можете выбрать will_paginate или kaminari , так как Forem поддерживает оба:

 gem 'will_paginate' # or gem 'kaminari' 

Если вы используете Rails 3, укажите ветку rails3 следующим образом:

 gem 'forem', github: "radar/forem", branch: "rails3" 

Для начала нам нужно настроить некоторую аутентификацию. Самое интересное в Forem — это то, что он позволяет вам выбрать любое решение или написать собственное решение с нуля. В этой статье мы будем использовать Devise, гибкую систему аутентификации, созданную Plataformatec. Если вы не знакомы с ним, проверьте руководства . Чтобы начать, вам нужно всего лишь пару шагов.

Запустите генератор Devise:

 rails generate devise:install 

Возможно, вы захотите изменить некоторые настройки в initializer / devise.rb (вы определенно захотите сделать это при работе с реальным приложением). Для целей этой демонстрации настройки по умолчанию будут в порядке. Когда вы закончите, запустите другой генератор, чтобы подготовить модель:

 rails generate devise User 

Наконец, запустите миграцию:

 rake db:migrate 

Разработайте корабли с множеством представлений для входа в систему, регистрации и других форм, которые вы можете настроить. Для этого выполните эту команду:

 rails g devise:views 

Это копирует виды по умолчанию в ваше приложение, и вы можете настроить их так, как вам нравится.

Установка Forem

На данный момент мы готовы к установке Forem. Он поставляется с хорошим генератором, который задаст вам пару вопросов для создания файла инициализатора и миграций:

 rails g forem:install 

Вопросы:

  • Как называется ваш пользовательский класс? (по умолчанию User )
  • Как называется помощник current_user в вашем приложении? (по умолчанию — current_user )

Если вы выбрали Devise и назвали свою модель User , вы можете спокойно нажать «Enter» для обоих вопросов. Миграция Forem будет выполняться автоматически, поэтому мы закончили с командной строкой.

Откройте файл маршрутов (обратите внимание, что уже есть пара маршрутов — они были добавлены Devise и Forem автоматически) и добавьте корневой маршрут:

routes.rb

 [...] root to: 'pages#home' 

Затем создайте PagesController и соответствующее представление pages/home.html.erb без содержимого. Если вы используете Rails 3, не забудьте удалить файл public/index.html .

Теперь пришло время настроить наш макет.

application.html.erb

 <% flash.each do |key, value| %> <%= content_tag(:div, value, class: "alert alert-#{key}") %> <% end %> <%= link_to 'Home', main_app.root_path %> <%= link_to 'Forums', forem.forums_path %> <header> <nav> <% if user_signed_in? %> <%= link_to current_user.email, main_app.edit_user_registration_path %> | <%= link_to "Sign out", main_app.destroy_user_session_path, :method => :delete %> <% if current_user.forem_admin %> | <%= link_to "Administrate", forem.admin_root_url %> <% end %> <% else %> <%= link_to "Sign up", main_app.new_user_registration_path %> | <%= link_to "Sign in", main_app.new_user_session_path %> <% end %> </nav> </header> 

Обратите внимание, что вместо использования root_path я указал main_app.root_path . Это связано с тем, что Forem является движком Rails и имеет собственную изолированную систему маршрутизации. В противном случае он может конфликтовать с маршрутами вашего приложения. Поэтому, чтобы получить доступ к маршрутам forem.route_name , используйте forem.route_name .

Настройка Forem

Следующим шагом является добавление метода в файл модели:

user.rb

 [...] def forem_name email end 

Метод forem_name используется для отображения имени пользователя рядом с его / ее постом. Devise предоставляет только столбец email , поэтому мы используем его вместо имени. В вашем приложении вы можете добавить столбец name в таблицу users и предоставить своим пользователям способ изменить свое имя.

Также имейте в виду, что Forem использует Gravatar для отображения аватаров пользователей, используя электронную почту для поиска аватара. Если у вас нет электронной почты в таблице пользователей, вы можете добавить другой метод в файл модели и сообщить Forem, где хранятся электронные письма пользователей:

user.rb

 [...] def forem_email email_address end 

Откройте файл initializers / forem.rb . Есть несколько настроек, которые вы можете изменить здесь. А пока добавьте этот кусок кода:

Инициализаторы / forem.rb

 Rails.application.config.to_prepare do Forem.layout = "application" end 

По умолчанию Forem будет использовать свой собственный макет для отображения страниц форума, но мы хотим указать наш собственный макет. Обратите внимание, что в документации сказано использовать Forem::ApplicationController.layout "application" но я обнаружил проблему с этим параметром. Таким образом, мы должны придерживаться Forem.layout = "application" . Надеюсь, это будет исправлено в ближайшее время.

Forem также создает пару файлов в каталоге vendor . Если ваш application.js уже подключает jQuery (по умолчанию это делает), удалите строку //= require jquery из vendor / assets / javascripts / forem.coffee.js . Теперь измените файл forem.css.scss :

поставщик / активы / таблицы стилей / forem.css.scss

 @import 'forem-bootstrap'; 

Эта строка импортирует тему Bootstrap для Forem (предоставляется forem-bootstrap ). Последняя задача, которую нужно выполнить, — это два файла:

JavaScripts / application.js

 [...] //= require forem 

таблицы стилей / application.css.scss

 @import 'forem/base'; 

Также, если вы находитесь на Rails 4, добавьте ресурсы Forem для прекомпиляции:

инициализатор / asset.rb

 Rails.application.config.assets.precompile += %w( forem.css forem.js ) 

Круто, мы закончили с базовой настройкой. Теперь вы можете запустить свой сервер, зарегистрировать нового пользователя и назначить права администратора (для этого откройте таблицу users и forem_admin атрибута forem_admin значение true ). Попробуйте создать несколько категорий, форумов, тем — все должно работать. Обратите внимание, что по умолчанию все созданные темы помечаются как «должны быть модерированы», прежде чем они будут видны пользователям.

Форматеры и Смайлики

Как насчет форматирования постов? Благодаря forem-redcarpet он должен работать нормально — обеспечивается даже подсветка кода. В настоящее время подсветка поддерживается Redcarpet, но я создал запрос на выборку, предлагающий перейти на Coderay — вы можете проверить его здесь .

Доступны и другие средства форматирования , но (как я выяснил) у некоторых из них есть проблемы с цитированием — проверьте эту проблему, если хотите узнать подробности.

Пользователи могут также использовать смайлики в своих сообщениях, предоставленных Emoji . К сожалению, я нашел проблему с ними при использовании Rails 4.1 — вы можете прочитать об этом здесь .

Вывод

Это все на сегодня, ребята! Мы успешно настроили Forem для работы с нашим приложением в кратчайшие сроки. Кстати, вы можете проверить реальные проекты, которые используют Forem здесь .

Если у вас возникли проблемы при настройке или использовании Forem, пожалуйста, не стесняйтесь открыть вопрос на GitHub, предоставив всю необходимую информацию. Исправления ошибок и новые функции также приветствуются, так что вы можете пойти дальше и клонировать репозиторий Forem, чтобы начать его прямо сейчас!

Какое решение для форума вы используете для своего сайта? Поделитесь своим опытом в комментариях :).

Приятного общения на недавно созданном форуме и до скорой встречи!