Комментируем вместе с Juvia на облегчённом языке разметки Markdown

24 марта 2013

Какой же блог без комментариев и вездесущих комментаторов? Только на сей раз речь пойдёт не о популярнейших сервисах Disqus и IntenseDebate, а о том, как установить себе комментарии Juvia. Тем самым, мы скажем дружное «нет» использованию HTML кода в комментариях, заменив его легковесной разметкой Markdown, да ещё и с превью комментариев «на лету». На сегодня, именно Juvia стала связующим звеном между комментаторами и ведущим этого блога.

Создание приложения Juvia

Система комментариев Juvia имеет открытый исходный код, с ней вы не привязаны к какому-либо сервису, а вправе выбирать свой вариант размещения, например, на OpenShift. Пробы комментаторского пера с Juvia доступны на тестовой странице с логином discard@phusion.nl и паролем 123456. Для тех, кому комментарии пришлись по нраву, есть мой пример Juvia на OpenShift. Не рекомендую пользоваться другим примером, который на сегодня устарел и не поддерживает, например, изменение порядка комментариев.

Настройка аккаунта на OpenShift уже описана здесь, поэтому сразу перейдём к созданию приложения

$ rhc app create juvia ruby-1.9

где juvia — имя системы комментариев. Её база управляется MySQL и подключается к приложению отдельно

$ rhc cartridge add mysql-5.1 -a juvia

Запоминать логин и пароль к базе нет нужды, поскольку они хранятся в переменных OPENSHIFT_MYSQL_DB_USERNAME и OPENSHIFT_MYSQL_DB_PASSWORD. Войдём в директорию приложения

$ cd juvia

и добавим удалённый репозиторий с примером Juvia на OpenShift

$ git remote add juvia -m master git://github.com/vonavi/juvia-openshift.git

Остаётся перенести его в нашу директорию. Ввиду возможных конфликтов, условимся со стратегией их разрешения:

$ git pull -s recursive -X theirs juvia master

Тип стратегии задан ключом -s recursive, а любые конфликты между локальным и удалённым репозиторием будут решены в пользу последнего, в соответствии с опцией -X theirs.

Водружение Juvia на сервер

Отредактируем файл конфигурации config/application.yml с учётом примечаний из данного примера. Параметры Juvia при размещении на OpenShift задаются в разделе production, который приводится к примерно следующему виду:

production:
  base_url: http://juvia-<namespace>.rhcloud.com
  from: juvia@yoursite.com
  email_method: sendmail

В base_url задан полный URL местонахождения приложения. Для отправки уведомлений используется локальная служба сообщений sendmail на OpenShift. Независимо от указанного email в поле from, отсылка происходит от имени no-reply@rhcloud.com.

Разместим Juvia на сервере вместе с внесёнными правками:

$ git add .
$ git commit -m "my first commit"
$ git push origin master

При первом посещении страницы http://juvia-<namespace>.rhcloud.com создаётся администратор приложения, а указанный в аккаунте адрес почты используется для отсылки извещений о комментариях.

Примечание. Владельцам почты на Gmail необходимо настроить спам-фильтр, чтобы сообщения не попали в нежелательные. В этом вам поможет меню «Создать новый фильтр» (НастройкиФильтры). Нужно заполнить поле «От» как no-reply@rhcloud.com, потом выбрать «Создать фильтр в соответствии с этим запросом» и задать действие «Никогда не отправлять в спам», а напоследок «Создать фильтр».

Подключение комментариев к блогу

В раздел «Sites» админки Juvia добавляете свой блог и получаете уникальный ключ сайта. На странице помощи приведён JavaScript-сценарий, который нужно всего лишь добавить к страницам, где планируются комментарии. Первый раздел JavaScript, где указаны options, я модифицировал под использование совместно с Jekyll:

var options = {
  container    : '#comments',
  site_key     : '(some site key)',
  topic_key    : '{{ page.url }}',
  topic_url    : '{{ site.url }}{{ page.url }}',
  topic_title  : '{{ page.title }}' || '{{ site.url }}{{ page.url }}',
  include_base : !window.Juvia,
  include_css  : !window.Juvia,
  comment_order: 'earliest-first'
};

Главное его отличие заключается в topic_key, однозначно задающим ключ страницы с комментариями. Если оставить его как location.pathname, то страница вида index.html будет идентифицироваться по-разному, в зависимости от того, был введён в адресной строке браузера URL с явным указанием index.html или нет. Форму для отправки комментариев создавать не нужно, достаточно разместить на её месте элемент

<div id="comments"></div>

(или с любым другим id, указанном в свойстве container).

Работа с копиями MySQL базы

Модерация комментариев производится с сайта приложения. Но бывают ситуации, когда необходима сама MySQL база, будь то её правка или перенос. Juvia хранит в базе данных всех пользователей, site_key для каждого из сайтов и всю информацию по комментариям, что позволяет восстанавливать все данные приложения по дампу базы MySQL.

Каждое приложение на OpenShift имеет доступ по SSH, и Juvia в этом не исключение. Нужно просто ввести

$ rhc app show juvia

и найти в выводе команды подключение по SSH, которое имеет вид uuid@juvia-<namespace>.rhcloud.com. Теперь зайдём в приложение Juvia на сервере

$ ssh uuid@juvia-<namespace>.rhcloud.com

и создадим там дамп MySQL базы, воспользовавшись модификацией примера с форума OpenShift:

mysqldump -h $OPENSHIFT_MYSQL_DB_HOST -P $OPENSHIFT_MYSQL_DB_PORT \
-u $OPENSHIFT_MYSQL_DB_USERNAME -p$OPENSHIFT_MYSQL_DB_PASSWORD \
juvia > $OPENSHIFT_TMP_DIR/juvia.sql

Имя базы juvia должно совпадать с именем приложения. Отметим, что пароль администратора базы данных задаётся без разделяющего пробела, то есть -p$OPENSHIFT_MYSQL_DB_PASSWORD. В результате будет создан файл /tmp/juvia.sql, содержащий дамп MySQL базы. Скопировать дамп на локальный компьютер можно утилитой SCP, работа которой схожа с обычной командой cp:

$ scp uuid@juvia-<namespace>.rhcloud.com:/tmp/juvia.sql .

Загрузка дампа на OpenShift осуществляется аналогично

$ scp juvia.sql uuid@<app>-<namespace>.rhcloud.com:/tmp/

с той лишь разницей, что uuid соответствует приложению, куда заливается база. Подключимся к новому приложению по SSH

$ ssh uuid@<app>-<namespace>.rhcloud.com

и импортируем данные в его MySQL базу. Только учтите, что вся предыдущая база данных будет утеряна. Воспользуемся модификацией другого примера с форума OpenShift, где [DBNAME] означает имя базы, куда импортируются данные:

mysql -h $OPENSHIFT_MYSQL_DB_HOST -P $OPENSHIFT_MYSQL_DB_PORT \
-u $OPENSHIFT_MYSQL_DB_USERNAME -p$OPENSHIFT_MYSQL_DB_PASSWORD \
[DBNAME] < $OPENSHIFT_TMP_DIR/juvia.sql

Примечание. Для внесения изменений в базу MySQL рекомендуется приложение phpMyAdmin, с доступной для всех демо-версией.

Наверх

Наверх