Schöne Art, eine Entwicklungsumgebung zu betreiben

Hallo zusammen, ich teile hier ein praktisches Skript, das mir hilft, meine Discourse-Entwicklungsumgebung auszuführen.

Es zieht alle neuesten Änderungen, holt die Updates von installierten Plugins und führt alle Migrationen durch, sowie die Installation der notwendigen Gems und pnpm-Pakete.

Der Nachteil des Skripts ist, dass es auch die mit dem Core gebündelten Plugins zieht, was technisch gesehen nichts bewirken würde, da diese mit dem ersten git pull aktualisiert würden. Na ja.

Hinweis: chatgpt.com hat mir geholfen, die Logik der if-Anweisung zu schreiben (meine anfänglichen Experimente schlugen fehl).
~/rundiscourse.sh:

#!/bin/bash

cd ~/discourse
git pull
cd plugins
PLUGIN_DIR=~/discourse/plugins

for folder in "$PLUGIN_DIR"/*; do
  if [ -d "$folder/.git" ]; then
    output=$(git -C "$folder" pull)
    if ! echo "$output" | grep -q "Already up to date."; then
      echo "[$(basename "$folder")] $output"
    fi
  fi
done
cd ~/discourse
bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u

Dann ausführen:

chmod +x rundiscourse.sh

Gehen Sie dann zur Datei ~/.bashrc (mit nano oder einem anderen Editor) und fügen Sie diesen Teil hinzu, falls er noch nicht vorhanden ist (er befindet sich weiter unten):

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Fügen Sie dann Folgendes zur Datei ~/.bash_aliases hinzu:

alias discourse="~/rundiscourse.sh"

Schließen Sie Ihr Terminal und öffnen Sie es erneut.
Wenn Sie nun discourse im Terminal ausführen, sollte Ihre Entwicklungsumgebung starten!


Ich hoffe, das hat geholfen! Lassen Sie mich auch wissen, wenn ich etwas falsch mache oder ob es verbessert werden kann. Danke!

1 „Gefällt mir“

Schön. Ein paar Vorschläge.

Der Shebang sollte #!/usr/bin/env sh lauten, was am portabelsten ist. Das Skript verwendet keine Bash-spezifischen Befehle, daher sollte es in jeder Bourne-Shell-kompatiblen Shell funktionieren, nicht nur in Bash.

Fügen Sie nach dem Shebang set -e hinzu. Dies bewirkt, dass das Skript beendet wird, wenn einer der Befehle fehlschlägt. Andernfalls werden Befehle weiterhin ausgeführt und schlagen später fehl, weil beispielsweise bundle install fehlgeschlagen ist und die Fehlerausgabe nun vom Bildschirm des Benutzers verschwunden ist.

Nun ist der Plugin-Git-Pull etwas problematischer, da Fehler, die an STDERR geschrieben werden, und eine fehlschlagende Git-Ausführung nicht ordnungsgemäß behandelt werden. Daher habe ich STDERR auch an STDOUT weitergeleitet und den Exit-Code verfolgt.

Es werden keine cd-Befehle oder die Variable PLUGIN_DIR benötigt.

#!/usr/bin/env sh
set -e

cd ~/discourse
git pull

for folder in plugins/*; do
  if [ -d "$folder/.git" ]; then
    exitcode=0
    output=$(git -C "$folder" pull 2>&1) || exitcode=$?
    if echo "$output" | grep -q -v "Already up to date."; then
      echo "[$(basename "$folder")]"
      echo "$output"
      [ "$exitcode" -ne 0 ] && exit "$exitcode"
    fi
  fi
done

bundle install
pnpm install
bin/rails db:migrate
DISCOURSE_HOSTNAME=localhost UNICORN_LISTENER=localhost:3000 bin/ember-cli -u

Ich hatte bereits ein ähnliches Skript, außer dem Git-Pull, da ich nicht möchte, dass dies jedes Mal geschieht.

1 „Gefällt mir“

Danke für die Einblicke! Ich werde das mal ausprobieren!