Ein Versuch, eine Entwicklungsumgebung auf dem neuesten Stand zu halten

Wie ich hier beklagte, habe ich oft das Gefühl, mehr Zeit damit zu verbringen, meine Entwicklungsumgebung auf dem neuesten Stand zu halten, als Code zu schreiben.

Ich habe ein Skript, das ich verwende, um Discourse mit einer Reihe von ENV-Einstellungen zu starten, das auch eine Menge anderer Dinge tut. Heute schlug es fehl, die richtige Version von nodejs zu erhalten, und ich verbrachte noch mehr Zeit damit, es zu aktualisieren. Ich habe sogar Dinge wie grep verwendet, um störende Ausgaben von asdf und ähnlichem herauszufiltern. Hier ist der Abschnitt, der Discourse aktualisiert.

Hier ist, was es tut:

  • Ruft die Repositories all-the-plugins und all-the-themes ab und/oder aktualisiert sie. Diese sind sehr nützlich, um Beispiele für die Vorgehensweise zu finden. Wenn sie in den letzten 100 Minuten heruntergeladen wurden, wird dieser Schritt übersprungen.
  • Holt die neueste Basisversion mit docker pull (das Fehlen dieses entscheidenden Schritts ist der Grund, warum ich heute so viel Zeit damit verbracht habe – irgendwie dachte ich, dass ein git pull in discourse_docker ausreichen würde :person_shrugging: ).
  • Führt die Basis-Image mit docker run aus, um die Versionen für Ruby, Imagemagick und Node zu erhalten; dann werden diese Versionen mit asdf global installiert und angewendet. (Es wird davon ausgegangen, dass Sie asdf haben – das erledige ich in meinem newmachine-Skript.).
  • Wechselt im Discourse-Verzeichnis zu main, führt git pull aus, führt pnpm update und dedupe aus.
  • Migriert die Datenbank und die Testdatenbank.

Ich habe es nirgendwo anders als unter Linux (Pop!_OS, das meist Ubuntu ist) getestet.

SRC=~/src/discourse-repos
DISCOURSE_SRC=/home/pfaffman/src/discourse-repos/discourse
ALL_THE_PLUGINS=~/src/discourse-repos/all-the-plugins
ALL_THE_THEMES=~/src/discourse-repos/all-the-themes
ARG=$1
COMMAND=""

if [[ "$ARG" == "update" ]] || [[ "$ARG" == "upgrade" ]]
then
  # HINWEIS: Wenn Bundler defekt ist, versuchen Sie `gem install bundler -v 2.5.3`

  if ! [[ -d $ALL_THE_PLUGINS ]]; then
    echo "PLUGINS FEHLEN"
    cd $SRC
    git clone https://github.com/discourse/all-the-plugins
    cd $ALL_THE_PLUGINS
    ./reset-all-repos
  fi
  cd $ALL_THE_PLUGINS
  if [ -z "$(find official -mmin -100)" ]; then
    echo -e "\nAktualisiere die Plugins\n "
    ./reset-all-repos
  fi

  if ! [[ -d $ALL_THE_THEMES ]]; then
    echo "THEMES FEHLEN!!!"
    sleep 5
    cd $SRC
    git clone https://github.com/discourse/all-the-themes
    cd $ALL_THE_THEMES
    ./reset-all-repos
  fi

  cd $ALL_THE_THEMES
  if [ -z "$(find official -mmin -100)" ]; then
    echo -e "\nAktualisiere Themes. . .\n"
    ./reset-all-repos
  fi

  asdf plugin add ruby |grep -v "already"
  asdf plugin add imagemagick |grep -v "already"
  asdf plugin update --all > /dev/null

  docker pull discourse/base:release
  RUBY_VERSION=$(docker run discourse/base:release bash -c 'ruby --version'|cut -d' ' -f2)
  echo "Got RUBY_VERSION $RUBY_VERSION"
  asdf install ruby $RUBY_VERSION|grep -v "already"
  asdf global ruby $RUBY_VERSION|grep -v "already"
  IMAGE_MAGICK_VERSION=$(docker run discourse/base:release bash -c 'convert --version'|head -1|cut -d' ' -f3)
  echo "Got IMAGE_MAGICK_VERSION: $IMAGE_MAGICK_VERSION"
  asdf install imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
  asdf global imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"

  # 2025-01-13 Hole Node-Version aus dem Basis-Container!
  NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
  echo "GOT NODEJS version: $NODE_VERSION"
  asdf install nodejs $NODE_VERSION|grep -v "already"
  asdf global nodejs $NODE_VERSION|grep -v "already"
  npm install -g pnpm

  # Ende der Versionsaktualisierungen
  cd $DISCOURSE_SRC
  git checkout main
  git pull
  bundle install
  echo -e "\n-----------> Führe pnpm update aus. . .\n"
  pnpm update
  echo -e "\n-----------> Führe pnpm dedupe aus. . .\n"
  pnpm dedupe
  echo -e "\n-----------> Migriere die Datenbanken. . .\n"
  LOAD_PLUGINS=1 ./bin/rake db:migrate
  LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
  exit
fi
2 „Gefällt mir“

Das ist für lokale Entwicklungsumgebungen mit Docker, richtig?

Nein. Ohne Docker. Wenn Sie Docker verwenden, wird all dies im Docker-Container behandelt.

1 „Gefällt mir“

Jay, ich wünschte, ich könnte mit mehreren :chefs_kiss: reagieren.

Getestet auf Ubuntu unter WSL als Nicht-Root, stieß ich auf ein paar Schwierigkeiten und Dinge, die getan werden mussten, bevor es erfolgreich lief.

Ich musste nur:

  • asdf[1] wie in Ihrer Anleitung beschrieben und nodejs[2] installieren, bevor das Skript ausgeführt wurde.

  • sudo chown -R $(whoami):$(whoami) ~/discourse ausführen, da ich Berechtigungsprobleme[3] hatte, als das Skript pnpm dedupe ausführte. Ich bin nicht gerade fließend in Linux, daher gibt es vielleicht eine passendere Lösung.

Ein kleiner Vorschlag, um diese Anleitung noch besser zu machen: Vielleicht könnten Sie Platzhalter verwenden, um die Pfadvariablen am Anfang Ihres Codeblocks zu ersetzen. Das wäre zwar keine riesige Erleichterung, aber eine nette Geste. :smile:


  1. Getting Started | asdf ↩︎

  2. asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git ↩︎

  3. EACCES: permission denied, unlink '/home/coco/discourse/app/assets/javascripts/discourse-plugins/node_modules/ember-this-fallback' ↩︎

1 „Gefällt mir“

Hmm. Ja. Vielleicht sollte es prüfen, ob Node.js installiert ist. Ich bin mir nicht sicher, wie ich Node.js auf einem neuen Computer installiere.

Danke

1 „Gefällt mir“