Обсуждение:Сайт LessWrong.ru
Всё переписать
Berekuk (обсуждение) 17:17, 22 января 2019 (MSK)
Рассматриваю вариант переписать lesswrong.ru (ту часть, которая не вики) на Django и Wagtail.
Rationale
Зачем:
- Мало людей, умеющих в Drupal 7 (ожидается, что Python в LW-сообществе знает большее число людей, чем PHP)
- Мало людей, хотящих в Drupal 7 (низкий статус PHP как языка для разработки в LW-сообществе)
- Drupal 7 устарел, миграция на Drupal 8 затратна
- Drupal 8 тоже не очень популярен и вряд ли это изменится
- текущий код и конфигурация сайта хранятся в файлах и в базе, а не на github'е - нельзя отвечать "присылайте pull request'ы" (это можно было бы исправить, но требует кого-то, кто разбирается в Drupal)
- Больше возможностей в Django для продвинутых фич без борьбы против фреймворка
Что могло бы быть вместо Django / альтернативные решения:
- аналогичные фреймворки: Laravel (PHP), Rails (Ruby)
- оба эти варианта хорошие, но с PHP остаётся проблема низкого статуса, а Ruby, кажется, постепенно теряет популярность
- более современные языки и фреймворки: что-то на Go, Rust, Elixir, и т.д.
- менее зрелые экосистемы
- больше вероятности, что язык быстрее станет менее популярен, а мы останемся с legacy
- Meteor
- умирает и ненавидим нормальными разработчиками (хотя это не помешало сделать на нём lesswrong.com)
- Node + Express + isomorphic React или что-то в этом духе
- из плюсов: продвинутые технологии, раздолье для перфекционизма
- минусы: потребует гораздо больше усилий (под ноду нет аналогов Django/Rails/Laravel, насколько я знаю)
- Static Site Generator (Hugo/Jekyll) + самописная админка
- больше ограничений для написания простых фич
- больше усилий на написание кастомной админки
- медленный деплой новых фич (например, Gatsby + Netlify CMS - круто, но любая правка требует полной пересборки сайта за несколько минут, инкрементальную сборку всё ещё не завезли)
- высокий порог вхождения, если требовать хранение всего на github и принимать правки через pull request'ы (в ЛВ много программистов, но далеко не все)
- Движок lesswrong.com
- нет i18n, добавить будет ооочень непросто
- все минусы по высокому порогу входа в разработку
- Wordpress
- не очень разбираюсь, возможно что это не ужасно, но опять же PHP
Как выглядел бы переезд / что надо сделать
Drupal-часть LessWrong.ru - это в первую очередь переводы и инфраструктура вокруг них. На новом движке можно было бы сделать больше функционала, но заведомо известно, что на Django это будет решаемо, так что задача сводится к "сделать сайт на Django/Wagtail с переводами, убедиться, мы не потеряли никаких важных сценариев использования, и перенести существующую базу переводов".
Учитывая то, что проект достаточно большой, мне кажется разумным при этом не менять дизайн или структуру сайта. Это можно будет сделать позже.
Дальнейшее ТЗ пишу в предположении, что мы следуем этой стратегии - сохраняем дизайн и структуру, заменяем только движок.
Что должен включать новый сайт и что для этого надо будет сделать:
- база переводов - иерархическая структура страниц с теми же полями, как было в drupal
- поля: заголовок, текст, переводчики, ссылка на оригинал, номер в книге
- этот пункт, кажется, легко отображается на wagtail
- UI для отображения базы переводов - страница /w и навигация в футере каждого перевода, навигация в левой колонке
- общая обвязка сайта - верхнее меню, меню в левой колонке, стили, главная страница
- для воспроизведения стилей можно пользоваться шаблонами из текущей drupal-темы
- но вообще в drupal итоговый html/css является смесью из темы и из родных drupal-стилей; текущая тема достаточно минималистичная (я её писал с нуля), но без родных drupal-стилей она работать не будет
- поэтому потребуется немало доработки напильником
- для воспроизведения стилей можно пользоваться шаблонами из текущей drupal-темы
- авторизация
- и перенос в базу пользователей пользователей из друпала
- возможно ли это вообще, если все пароли зашифрованы? вероятно, нет, все пароли придётся сбросить и просить вести новый при первом логине. или как?
- и перенос в базу пользователей пользователей из друпала
- воркфлоу для правок и премодерации
- прямо сейчас на сайте есть возможность править любые тексты даже без регистрации (но без регистрации правки уходят на премодерацию)
- у модераторов должна быть возможность поменять структуру цепочек и книг (но вроде эта задача решается через wagtail без проблем)
- очень важно не потерять историю ревизий
- в wagtail история ревизий есть, её надо будет сделать публичной
- по-хорошему, надо будет импортировать все ревизии из старой базы, а не только последнюю - они могут пригодиться
- импорт всех текстов
- тексты в markdown'е (99% из них, по крайней мере; есть некоторые с html'ем, но не переводы, а другие вспомогательные страницы)
- но не совсем в markdown'е, потому что там есть несколько расширений типа freelinking'а и mathjax'а
- поэтому эта задача может оказаться сложнее, чем кажется, и может оказаться даже наиболее сложной и муторной во всём проекте
- поддержка всех старых ссылок и редиректов
- например, у всех переводов есть короткая ссылка (пример: https://lesswrong.ru/225), их надо сохранить
- ещё у многих переводов есть несколько адресов, потому что при переименовании страницы сохранялся редирект (все эти адреса можно выгрузить из базы)
- в общем, эта задача тоже может оказаться очень муторной, хотя её не обязательно делать 100% идеально (на некоторые редко посещаемые урлы можно забить; например, мне не кажется важным поддерживать ссылку на историю ревизий
- для проверки можно будет, например, взять все логи nginx и проверить, что по всем посещённым за последние N месяцев урлам отдаётся что-то осмысленное
Технические требования:
- mysql/mariadb (потому что они уже используются и ставить postgres параллельно неохота)
- весь код на github