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 eingit pullindiscourse_dockerausreichen würde
). - Führt die Basis-Image mit
docker runaus, um die Versionen für Ruby, Imagemagick und Node zu erhalten; dann werden diese Versionen mitasdfglobal installiert und angewendet. (Es wird davon ausgegangen, dass Sieasdfhaben – das erledige ich in meinemnewmachine-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