Обсуждение:Сайт LessWrong.ru

Материал из Вики 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-стилей она работать не будет
      • поэтому потребуется немало доработки напильником
  • авторизация
    • и перенос в базу пользователей пользователей из друпала
      • возможно ли это вообще, если все пароли зашифрованы? вероятно, нет, все пароли придётся сбросить и просить вести новый при первом логине. или как?
  • воркфлоу для правок и премодерации
    • прямо сейчас на сайте есть возможность править любые тексты даже без регистрации (но без регистрации правки уходят на премодерацию)
    • у модераторов должна быть возможность поменять структуру цепочек и книг (но вроде эта задача решается через wagtail без проблем)
  • очень важно не потерять историю ревизий
    • в wagtail история ревизий есть, её надо будет сделать публичной
    • по-хорошему, надо будет импортировать все ревизии из старой базы, а не только последнюю - они могут пригодиться
  • импорт всех текстов
    • тексты в markdown'е (99% из них, по крайней мере; есть некоторые с html'ем, но не переводы, а другие вспомогательные страницы)
    • но не совсем в markdown'е, потому что там есть несколько расширений типа freelinking'а и mathjax'а
    • поэтому эта задача может оказаться сложнее, чем кажется, и может оказаться даже наиболее сложной и муторной во всём проекте
  • поддержка всех старых ссылок и редиректов
    • например, у всех переводов есть короткая ссылка (пример: https://lesswrong.ru/225), их надо сохранить
    • ещё у многих переводов есть несколько адресов, потому что при переименовании страницы сохранялся редирект (все эти адреса можно выгрузить из базы)
    • в общем, эта задача тоже может оказаться очень муторной, хотя её не обязательно делать 100% идеально (на некоторые редко посещаемые урлы можно забить; например, мне не кажется важным поддерживать ссылку на историю ревизий
      • для проверки можно будет, например, взять все логи nginx и проверить, что по всем посещённым за последние N месяцев урлам отдаётся что-то осмысленное

Технические требования:

  • mysql/mariadb (потому что они уже используются и ставить postgres параллельно неохота)
  • весь код на github