재탕: 최신 개발 환경 유지하기

아니, 정말! 적어도 다음 명령어를 실행해 보려고 했다고 맹세하는데

asdf plugin update ruby

그런데 그것도 하지 않았던 것 같습니다. :crying_cat_face: :person_shrugging:

하지만 이제 정말로 가까워졌습니다! 여기 Discourse를 가져오고, Ruby, imagemagick, nodejs를 업데이트하며, 데이터베이스를 마이그레이션하는 제 스크립트가 있습니다.

DISCOURSE_SRC=/home/pfaffman/src/discourse-repos/discourse
DISCOURSE_DOCKER_SRC=/home/pfaffman/src/discourse-repos/discourse_docker
cd $DISCOURSE_SRC

  git -C $DISCOURSE_DOCKER_SRC pull https://github.com/discourse/discourse_docker
  DISCOURSE_BASE=$(grep -e ^image= $DISCOURSE_DOCKER_SRC/launcher|cut -d'"' -f2)
  cd -

  docker pull $DISCOURSE_BASE
  asdf plugin add nodejs #https://github.com/asdf-vm/asdf-nodejs.git
  asdf plugin add ruby #https://github.com/asdf-vm/asdf-ruby.git
  asdf plugin add imagemagick
  asdf plugin update --all
  RUBY_VERSION=$(grep -e ^RUBY_VERSION $DISCOURSE_DOCKER_SRC/image/base/install-ruby|cut -d'"' -f2)
  asdf install ruby $RUBY_VERSION
  asdf local ruby $RUBY_VERSION
  IMAGE_MAGICK_VERSION=$(grep -e ^IMAGE_MAGICK_VERSION ~//src/discourse-repos/discourse_docker/image/base/install-imagemagick|cut -d'"' -f2)
  asdf install imagemagick $IMAGE_MAGICK_VERSION
  asdf local imagemagick $IMAGE_MAGICK_VERSION
  # 2023-04-24 debian과 pop!os의 nodejs 버전이 다름
  NODE_VERSION=$(docker run discourse/base:2.0.20230420-0104 bash -c 'node --version'|cut -d'v' -f2)
  asdf install nodejs $NODE_VERSION
  asdf local nodejs $NODE_VERSION
  cd $DISCOURSE_SRC
  git checkout main
  git pull
  bundle install
  ./bin/rake db:migrate
  RAILS_ENV=test ./bin/rake db:migrate

redis와 postgres는 수동으로 최신 상태를 유지하는 것이 괜찮을 것 같지만, 다음에 OS를 설치했을 때 제 OS와 Discourse 버전이 달라져 있음을 발견하면 생각을 바꿀 가능성이 큽니다!

oxipng가 정확히 무엇인지 명확하지 않지만, 플러그인 개발자에게 잘못된 버전이 문제를 일으킬 가능성은 낮다고 생각합니다. jemalloc도 마찬가지입니다.

솔직히 말해서, imagemagick 버전 때문에 영향을 받을 플러그인 개발자가 얼마나 될지 저도 확신이 서지 않습니다. Ruby와 nodejs가 치명적인 문제(show stopper)를 일으킬 가능성이 높다고 생각합니다.

debian에 필요한 Ruby 버전이 제공되면 해당 스크립트가 사라질 것이라고 추측하지만, 이미 base 이미지에서 node 버전을 가져와야 한다는 사실을 알게 되었을 때 그 로직을 작성해 두었기 때문에, ruby와 imagemagick 버전도 이미지에서 가져오는 것이 더 안전할 수 있습니다.

@falco 님이 asdf plugin update --all로 제 문제를 해결해 준 시점과 이 스크립트를 작성한 시점 사이에 Ruby 버전이 3.2.2로 올라갔고, 제 코드가 이를 감지하여 asdf가 설치했습니다! 위 코드를 업데이트 스크립트에 추가했는데, 여기에는 다음이 포함되어 있습니다: