Mantener un entorno de desarrollo actualizado

Estoy intentando configurar una nueva máquina de desarrollo y falta bundler. Miro en https://raw.githubusercontent.com/discourse/install-rails/master/linux y veo que todavía está instalando ruby_version="2.7.6". Y volver a ejecutar ese script nunca ha parecido una forma muy fiable de actualizar una máquina de desarrollo.

¿Cómo lo hacen los demás? ¿Todo el mundo está realmente usando Install Discourse for development using Docker?

Para desarrollar mi panel, paso una serie de configuraciones en la línea de comandos con un script pfaffmanager-discourse que también extraerá el último discourse y migrará la base de datos. Supongo que puedo lograr eso de alguna manera en la versión de docker también.

¿Soy yo el anticuado al pensar que debería tener una instancia de desarrollo nativa en lugar de hacerlo en docker?

Uso ansible para configurar nuevas máquinas todo el tiempo, lo único que le falta a esa configuración es un script de desarrollo de discourse. ¿Alguien más querría algo así? ¿Podríamos moverlo al núcleo para que pudieras simplemente clonar discourse y luego ejecutar un playbook para obtener Ruby e imagemagick y cualquier otra cosa en las versiones adecuadas?

1 me gusta

Hasta donde sé, casi todos en el equipo de desarrollo utilizan un entorno de desarrollo nativo.

He estado usando asdf para administrar versiones de las muchas herramientas que uso, así que para mí es solo un

asdf install ruby 3.1.3
asdf local ruby 3.1.3

para que Discourse funcione en el nuevo Ruby.

Muy útil para mí ya que he estado comparando el rendimiento de Discourse en diferentes rubies y manejando la actualización de Ruby.

5 Me gusta

Por el momento, he pasado a una solución de Docker Compose, con un Dockerfile que determina la compilación de Discourse en la que estoy trabajando. Para cosas básicas, esto está funcionando bien hasta ahora, pero obviamente es un poco más lento que un entorno Ubuntu directo “en metal” …

2 Me gusta

Fuera de tema, sí, estoy muy impresionado con YJIT!!.. ¿Discourse ya soporta completamente Ruby 3.2?

4 Me gusta

¿Hay algún repositorio secreto que utilicen para mantener las cosas actualizadas?

¡Gracias! asdf es de gran ayuda. Creo que lo había visto antes, pero quería evitar Yet Another Package Manager. Si es lo suficientemente bueno para ti, me apunto.

Y parece que nodejs está desactualizado en el script de instalación también. Una instalación reciente tiene v18.12.1 y el script instala la 16.

Así que parece que

          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

Suponiendo que consigas esto en tu .bashrc (o similar) de alguna manera:

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

E instalando estas 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

Algunas de ellas podría haberlas añadido por alguna razón distinta a Discourse, aunque no estoy del todo seguro.

Y

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.com/mailhog/MailHog

(Probablemente no en ese orden) Se acerca bastante. El redis actual incluido con ubuntu es suficiente para el 99% de los desarrolladores (es 7.0.7 y no 6.x) ¡Oh! 7.0.7 es ahora lo que se incluye. Pero también hay un plugin asdf para redis.

Tal script sería entonces muy fácil de mantener en el núcleo cuando hubiera un cambio de versión en node, imagemagick o Ruby, y luego un desarrollador perezoso podría ejecutar ese script una vez a la semana o con cada nuevo pull y tener un entorno de desarrollo actualizado. Con una hora o tres, alguien ingenioso podría hacerlo lo suficientemente multiplataforma para Linux, Mac/homebrew y Windows/WSL en un par de horas. Afortunadamente, ya no tengo fácil acceso a Windows, así que no me ofrezco voluntario.

Pero creo que si vigilo los cambios en discourse_docker, tal vez me dé cuenta de cuándo se actualizan y mis adiciones improvisadas a mi playbook de newmachine de Ansible ahora pueden hacer el trabajo.

¡Gracias por el consejo! Creo que ahora puedo tener una configuración de desarrollo en cualquier máquina con un solo comando.

1 me gusta

Si bien puedo ver lo genial que sería tener todo eso manejado automáticamente, para mí, manejar mi entorno de desarrollo, las actualizaciones y todo lo demás, es una parte esencial del trabajo.

Es terrible para los recién llegados, y ahí es donde brillan herramientas como GitHub Codespaces, pero para las personas inmersas en el desarrollo diario de Discourse, comprender y poder manipular el entorno de desarrollo es útil para entender cómo encajan todas las piezas.

2 Me gusta

Bueno, el tipo que hace las pruebas de rendimiento de Ruby está lejos de ser un desarrollador típico, ¡pero está bien! Supongo que todos somos un poco diferentes en cómo nos gusta gestionar las cosas de todos modos.

Gracias a tu recomendación de asdf, creo que con eso podré mantener las cosas en orden en mis diversas máquinas.

1 me gusta

Hice la mayor parte del trabajo de compatibilidad ya en el impulso de la 3.1, así que ya estamos listos para el cambio a la 3.2 y lo haremos pronto.

4 Me gusta

Falco, ¿puedo revisar esto contigo?:

rake dev:populate

ahora parece producir un error:

Psych::DisallowedClass: Intentó cargar una clase no especificada: Date

¿Está esto relacionado con la nueva versión de Ruby o Rails?

Más:

Me pregunto cuánto mejorará el TTFB con el nuevo YJIT

1 me gusta

¡Este problema parece resuelto en la última versión, gracias a quien lo arregló! :pray: Es una instalación crítica para ayudar a construir eficientemente accesorios de prueba.

1 me gusta

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.