최신 개발 환경 유지하기

새로운 개발 환경을 설정하려고 하는데 bundler가 없습니다. https://raw.githubusercontent.com/discourse/install-rails/master/linux 를 확인해 보니 여전히 ruby_version="2.7.6"을 설치하고 있습니다. 그리고 그 스크립트를 다시 실행하는 방식은 개발 머신을 업데이트하는 데 매우 신뢰할 수 있는 방법이라고 느껴지지 않습니다.

다른 분들은 어떻게 하시는 건가요? 정말 모두가 Install Discourse for development using Docker 를 사용하고 있는 건가요?

대시보드를 개발할 때는 pfaffmanager-discourse 스크립트를 통해 명령줄로 여러 설정을 전달하고, 이 스크립트가 최신 discourse를 가져오고 데이터베이스를 마이그레이션하도록 하고 있습니다. Docker 버전에서도 이를 어떻게든 구현할 수 있을 것 같습니다.

Docker 대신 네이티브 개발 인스턴스를 가져야 한다는 것이 구식적인 생각인가요?

저는 항상 Ansible을 사용하여 새 머신을 설정합니다. 현재 설정에서 빠져 있는 것은 discourse 개발 스크립트뿐입니다. 다른 분들도 이런 기능이 필요할까요? 이를 코어에 포함시켜서 discourse를 클론한 후 플레이북을 실행하기만 하면 Ruby, ImageMagick 및 기타 필요한 도구들을 적절한 버전으로 설치할 수 있게 할 수 있을까요?

AFAIK(제 지식 범위 내로) 개발 팀의 거의 모든 사람이 네이티브 개발 환경을 사용합니다.

저는 사용하는 다양한 도구의 버전을 관리하기 위해 asdf를 사용하고 있으므로, 제 경우 새 Ruby로 Discourse를 실행하려면 다음과 같이 하면 됩니다:

asdf install ruby 3.1.3
asdf local ruby 3.1.3

Ruby 버전별로 Discourse 벤치마킹을 하고 Ruby 업그레이드를 진행 중이기 때문에 저에게는 매우 유용합니다.

일단 Docker Compose 솔루션으로 전환했으며, 작업 중인 Discourse 빌드를 Dockerfile로 결정하고 있습니다. 기본적인 작업에서는 지금까지 잘 작동하고 있지만, 직접 “메탈” Ubuntu 환경보다는 다소 느린 것이 사실입니다 …

주제에서 약간 벗어난 이야기지만, YJIT에 정말 인상받았습니다!!.. Discourse가 이미 Ruby 3.2를 완전히 지원하나요?

모두가 최신 상태를 유지하기 위해 사용하는 비밀 저장소가 있나요?

감사합니다! asdf가 정말 큰 도움이 됩니다! 이전에 본 적이 있는 것 같은데, 또 다른 패키지 매니저(Yet Another Package Manager)는 피하고 싶었습니다. 당신에게 충분한 도구라면 저도 완전히 활용하겠습니다.

그리고 설치 스크립트에서도 nodejs가 최신이 아닌 것 같습니다. 최근 설치된 버전은 v18.12.1인데, 스크립트는 16을 설치합니다.

따라서 다음과 같이 보입니다.

          git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2
          asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
          asdf plugin add imagemagick
          asdf install imagemagick 7.1.0-55
          asdf plugin add nodejs
          asdf install nodejs 18.12.1
```\n`.bashrc`(또는 유사한 파일)에 다음 내용이 포함되도록 해야 합니다:

. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash


그리고 이 젠(gems)들을 설치합니다:
  - bundler
  - discourse_theme
  - minitar
  - listen
  - rb-fsevent
  - rb-inotify
  - ffi
  - multipart-post
  - tty-prompt
  - pastel
  - tty-color
  - tty-reader
  - tty-screen
  - advancecomp
  - gifsicle
  - jpegoptim
  - libjpeg-progs
  - optipng
  - pngcrush
  - pngquant
  - jhead
  - rails 
이 중 일부는 Discourse 외의 다른 이유로 제가 추가했을 수도 있지만, 정확히 기억은 나지 않습니다.

그리고 

apt-get install -y git build-essential libxslt1-dev libcurl4-openssl-dev libksba8
libksba-dev libreadline-dev libssl-dev zlib1g-dev libsnappy-dev
sqlite3 libsqlite3-dev postgresql postgresql-server-dev-all
postgresql-contrib libpq-dev redis-server golang-go
go get GitHub - mailhog/MailHog: Web and API based SMTP testing · GitHub

(순서가 정확히 이 순서일 필요는 없습니다) 거의 근접합니다. 현재 ubuntu에 포함된 redis는 개발자의 99%에게는 충분합니다 ~~(6.x가 아닌 7.0.7입니다)~~ 아! 이제 7.0.7이 포함된 것이네요. 하지만 redis용 `asdf` 플러그인도 있습니다.

이러한 스크립트가 있다면 node, imagemagick 또는 Ruby의 버전이 업데이트될 때 코어에서 유지보수하기가 훨씬 쉬워질 것입니다. 그러면 게으른 개발자가 일주일에 한 번씩, 또는 새로운 pull 요청이 있을 때마다 이 스크립트를 실행하여 최신 개발 환경을 가질 수 있습니다. 몇 시간만 투자하면 Linux, Mac/homebrew, Windows/WSL에서 사용할 수 있도록 크로스 플랫폼으로 만들 수 있을 것입니다. 다행히 요즘 저는 Windows에 쉽게 접근할 수 없어서 자원봉사는 하지 않겠습니다.

하지만 `discourse_docker`의 변경 사항을 지켜본다면, 그 업데이트 시점을 알게 될 것이고, 제 `newmachine` ansible 플레이북에 해킹으로 추가한 부분들이 이제 일을 해줄 수 있을 것 같습니다.

팁을 알려주셔서 감사합니다! 이제 단일 명령으로 어떤 기기에서도 개발 설정을 갖출 수 있을 것 같습니다.

자동으로 처리되는 것이 얼마나 멋진지 이해할 수 있지만, 저에게는 개발 환경, 업데이트 등을 직접 관리하는 것이 업무의 필수적인 부분입니다.

초보자에게는 힘든 일이지만, 바로 이런 상황에서 GitHub Codespaces 같은 도구가 빛을 발합니다. 하지만 Discourse 개발에 매일 매진하는 사람들에게는 개발 환경을 이해하고 조작할 수 있는 능력이 전체 부품이 어떻게 맞물려 작동하는지 이해하는 데 도움이 됩니다.

글쎄, Ruby 벤치마킹을 하는 사람은 전형적인 개발자라고 보기 어렵지만, 충분히 이해합니다. 어쨌든 우리는 모두 일을 관리하는 방식이 조금씩 다른 것 같습니다.

asdf 추천해 주셔서 감사합니다. 덕분에 다양한 기기에서 환경을 깔끔하게 관리할 수 있을 것 같습니다.

대부분의 호환성 작업을 3.1 업데이트 때 이미 완료했기 때문에, 3.2로의 전환을 위해 이미 모든 준비가 끝났으며 곧 진행할 예정입니다.

Falco, 이 부분을 확인해 주실 수 있을까요?

rake dev:populate

이제 다음 오류를 발생시키는 것 같습니다:

Psych::DisallowedClass: Tried to load unspecified class: Date

이것이 새로운 Ruby 또는 Rails 버전과 관련이 있을까요?

추가 정보:

새로운 YJIT로 TTFB가 얼마나 개선될지 궁금합니다.

누구인지 모르지만 수정해 주셔서 감사합니다! 최신 버전에서 이 문제가 해결되었습니다. :pray: 이 기능은 테스트 픽스처를 효율적으로 구축하는 데 필수적입니다.