제가 여기에서 하소연했듯이, 코드를 작성하는 시간보다 개발 환경을 최신 상태로 유지하려고 하는 데 더 많은 시간을 보내는 것 같다는 느낌을 자주 받습니다.
저는 Discourse를 다양한 ENV 설정과 함께 시작하는 데 사용하는 스크립트가 있는데, 이 스크립트는 그 외에도 여러 가지 작업을 수행합니다. 오늘은 올바른 버전의 nodejs를 가져오는 데 실패해서 이 부분을 업데이트하는 데 더 많은 시간을 보냈습니다. asdf 등에서 나오는 노이즈 있는 출력을 grep으로 제거하는 것과 같은 작업도 했습니다. 여기에는 Discourse를 업데이트하는 부분이 있습니다.
스크립트가 수행하는 작업은 다음과 같습니다:
all-the-plugins와all-the-themes저장소를 검색하거나 업데이트합니다. 이 저장소들은 작업 방식을 보여주는 예제를 찾는 데 매우 유용합니다. 지난 100분 이내에 다운로드된 적이 있다면 이 단계를 건너뜁니다.- 최신 베이스 릴리스를
docker pull합니다. (이 중요한 단계를 누락한 것이 오늘 시간을 많이 쓴 이유입니다.discourse_docker에서git pull을 하면 된다고 생각했기 때문이죠
) - 베이스 이미지를
docker run하여 Ruby, Imagemagick, node의 버전을 가져온 다음,asdf를 사용하여 해당 버전을 설치하고 전역으로 적용합니다. (이 스크립트는asdf가 설치되어 있다고 가정합니다. 저는newmachine스크립트에서 이를 처리합니다.) - discourse 디렉터리에서 main 브랜치를 체크아웃하고, git pull을 실행한 후 pnpm update와 dedupe를 실행합니다.
- 데이터베이스와 테스트 데이터베이스를 마이그레이션합니다.
저는 Linux(Pop!OS, 대부분 Ubuntu 기반) 외의 환경에서는 테스트하지 않았습니다.
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
# 참고: bundler가 손상된 경우 `gem install bundler -v 2.5.3`을 시도해 보세요
if ! [[ -d $ALL_THE_PLUGINS ]]; then
echo "MISSING THE PLUGINS"
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 "\nUpdating the plugins\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "MISSING THE THEMES!!!"
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 "\nUpdating 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 베이스 컨테이너에서 node 버전을 가져오기!
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
# 버전 업데이트 끝
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n----------> Running pnpm update. . .\n"
pnpm update
echo -e "\n----------> Running pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n----------> Migrating the databases. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi