開発環境の実行方法として良いですね

皆さん、こんにちは。Discourse の開発インスタンスを実行するのに役立つスクリプトを共有します。

これは、最新の変更をすべてプルし、インストールされているプラグインの更新をプルし、すべてのマイグレーションを実行し、必要な gem と pnpm パッケージをインストールします。

スクリプトの欠点は、コアにバンドルされているプラグインもプルすることです。これは、最初の git pull で更新されるため、技術的には何も行われません。まあ、それはいいでしょう。

注: if ステートメントのロジックは chatgpt.com が作成を手伝ってくれました(私の最初の実験は失敗しました)。
~/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

次に、以下を実行します。

chmod +x rundiscourse.sh

次に、~/.bashrc ファイルを(nano などを使用して)開き、既に追加されていない場合はこの部分を追加します(下の方にあります)。

# 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

次に、~/.bash_aliases ファイルに以下を追加します。

alias discourse="~/rundiscourse.sh"

ターミナルを閉じてから再度開きます。
これで、ターミナルで discourse を実行すると、開発環境が開始されるはずです!


これが役に立ったなら幸いです!また、何か間違っていることや改善できる点があれば教えてください。ありがとうございます!

「いいね!」 1

素晴らしい。いくつか提案があります。

シェバンは、最もポータブルな #!/usr/bin/env sh にすべきです。このスクリプトは bash 固有の機能を使用していないため、bash だけでなく、Bourne shell 互換のシェルでも動作するはずです。

シェバンに set -e を追加してください。これにより、コマンドが失敗した場合にスクリプトが終了します。そうしないと、bundle install のようなものが失敗し、エラー出力がユーザーの画面から消えてしまっても、コマンドの実行が続行されてしまいます。

次に、プラグインの git pull は少し問題があり、STDERR に書き込まれたエラーや失敗した git 実行が適切に処理されません。そのため、STDERR を STDOUT にもリダイレクトし、終了コードを追跡するようにしました。

複数の cd コマンドや PLUGIN_DIR 変数の設定は不要です。

#!/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

私はすでに同様のスクリプトを持っていましたが、git pull に関しては毎回実行したくないため、それ以外は同じです。

「いいね!」 1

洞察をありがとうございます!試してみます!