Поддержание актуальной среды разработки

Я пытаюсь настроить новую машину для разработки, но у меня отсутствует bundler. Я зашел на https://raw.githubusercontent.com/discourse/install-rails/master/linux и увидел, что там всё ещё устанавливается ruby_version="2.7.6". К тому же повторное выполнение этого скрипта никогда не казалось надёжным способом обновления машины для разработки.

Как это делают другие? Действительно ли все просто используют Install Discourse for development using Docker?

При разработке своего дашборда я передаю множество настроек через командную строку с помощью скрипта pfaffmanager-discourse, который также обновляет последнюю версию Discourse и мигрирует базу данных. Думаю, я смогу каким-то образом реализовать это и в версии с Docker.

Неужели я просто устарел в своих взглядах, считая, что у меня должна быть нативная среда разработки, а не работа в Docker?

Я постоянно использую Ansible для настройки новых машин; единственное, чего не хватает в этом процессе, — это скрипта для разработки Discourse. Хотели бы другие что-то подобное? Можем ли мы перенести это в основную ветку, чтобы можно было просто клонировать Discourse и запустить playbook для установки Ruby, ImageMagick и всего остального в нужных версиях?

Насколько я знаю, почти все члены команды разработки используют нативную среду разработки.

Я использую asdf для управления версиями множества инструментов, которые применяю, поэтому для меня это просто:

asdf install ruby 3.1.3
asdf local ruby 3.1.3

чтобы запустить Discourse на новой версии Ruby.

Это очень удобно для меня, поскольку я проводил бенчмарки Discourse на разных версиях Ruby и занимался обновлением Ruby.

На данный момент я перешёл на решение с использованием Docker Compose, где Dockerfile определяет сборку Discourse, над которой я работаю. Для базовых задач это пока работает хорошо, но, очевидно, работает немного медленнее, чем прямая среда Ubuntu «на железе»…

Не по теме, да, я очень впечатлён YJIT!!.. поддерживает ли Discourse Ruby 3.2 полностью уже?

Есть ли какой-то секретный репозиторий, который они все используют для синхронизации версий?

Спасибо! asdf — огромная помощь! Кажется, я видел его раньше, но хотел избежать очередного менеджера пакетов. Если вам этого достаточно, то я за.

Кроме того, похоже, что в скрипте установки версия nodejs устарела. При недавней установке устанавливается v18.12.1, а скрипт ставит 16.

Так что, похоже, нужно выполнить:

          git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2
          asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
          asdf plugin add imagemagick
          asdf install imagemagick 7.1.0-55
          asdf plugin add nodejs
          asdf install nodejs 18.12.1

При условии, что вы каким-то образом добавите это в свой .bashrc (или аналогичный файл):

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash

И установите следующие гемы:

      - bundler
      - discourse_theme
      - minitar
      - listen
      - rb-fsevent
      - rb-inotify
      - ffi
      - multipart-post
      - tty-prompt
      - pastel
      - tty-color
      - tty-reader
      - tty-screen
      - advancecomp
      - gifsicle
      - jpegoptim
      - libjpeg-progs
      - optipng
      - pngcrush
      - pngquant
      - jhead
      - rails 

Некоторые из них я, возможно, добавил по причинам, не связанным с Discourse, хотя точно не уверен.

И также:

apt-get install -y git build-essential libxslt1-dev libcurl4-openssl-dev libksba8 \
libksba-dev libreadline-dev libssl-dev zlib1g-dev libsnappy-dev \
sqlite3 libsqlite3-dev postgresql postgresql-server-dev-all \
postgresql-contrib libpq-dev redis-server golang-go 
go get github.com/mailhog/MailHog

(Вероятно, не в таком порядке) — это почти полностью покрывает потребности. Текущая версия Redis, включённая в Ubuntu, хороша для 99% разработчиков (это 7.0.7, а не 6.x) О! Теперь 7.0.7 уже включена по умолчанию. Но для Redis также есть плагин asdf.

Такой скрипт было бы довольно легко поддерживать в ядре проекта при обновлении версий Node, ImageMagick или Ruby. Тогда любой ленивый разработчик мог бы запускать этот скрипт раз в неделю или при каждом новом pull-запросе, чтобы иметь актуальную среду разработки. За час или три кто-то толковый мог бы сделать его кроссплатформенным для Linux, Mac/homebrew и Windows/WSL. К счастью, у меня сейчас нет удобного доступа к Windows, поэтому я не предлагаю свою помощь.

Но, думаю, если я буду следить за изменениями в discourse_docker, то замечу обновления, и мои самодельные дополнения к моему ansible-плейбуку newmachine теперь могут справиться с задачей.

Спасибо за подсказку! Теперь, кажется, я смогу настроить среду разработки на любой машине одной командой.

Хотя я понимаю, как было бы здорово, если бы всё это обрабатывалось автоматически, для меня управление моей средой разработки, обновлениями и всем остальным является неотъемлемой частью работы.

Это неприятно для новичков, и именно здесь такие инструменты, как GitHub Codespaces, проявляют себя с лучшей стороны, но для людей, погружённых в повседневную разработку на Discourse, понимание и умение работать с окружением разработки полезно для того, чтобы понять, как все части сочетаются друг с другом.

Что ж, человек, занимающийся бенчмаркингом Ruby, далёк от типичного разработчика, но это справедливо! Думаю, мы все немного разные в том, как предпочитаем управлять вещами.

Благодаря твоей рекомендации asdf, я думаю, что с её помощью смогу держать всё в порядке на моих разных машинах.

Я уже провёл большую часть работы по совместимости при обновлении до версии 3.1, поэтому мы полностью готовы к переходу на 3.2 и сделаем это в ближайшее время.

Фалько, могу я обсудить с тобой этот момент:

rake dev:populate

теперь выдает ошибку:

Psych::DisallowedClass: Попытка загрузить недопустимый класс: Date

Связано ли это с новой версией Ruby или Rails?

Подробнее:

Интересно, насколько улучшится TTFB с новым YJIT

Эта проблема, похоже, решена в последней версии, спасибо тому, кто её исправил! :pray: Это критически важная функция для эффективного создания тестовых фикстур.