Maintenir un environnement de développement à jour

Je configure une nouvelle machine de développement et bundler est manquant. J’ai regardé https://raw.githubusercontent.com/discourse/install-rails/master/linux et j’ai vu qu’il installe toujours ruby_version=\"2.7.6\". Et réexécuter ce script n’a jamais semblé être un moyen très fiable de mettre à jour une machine de développement.

Comment d’autres personnes font-elles cela ? Est-ce que tout le monde utilise vraiment Install Discourse for development using Docker ?

Pour développer mon tableau de bord, je passe un tas de paramètres en ligne de commande avec un script pfaffmanager-discourse qui récupère également la dernière version de discourse et migre la base de données. Je suppose que je peux faire quelque chose de similaire avec la version docker.

Suis-je juste démodé en pensant que je devrais avoir une instance de développement native plutôt que de le faire dans docker ?

J’utilise ansible pour configurer de nouvelles machines tout le temps, la seule chose qui manque à cette configuration est un script de développement discourse. D’autres personnes voudraient-elles une telle chose ? Pourrions-nous la déplacer dans le cœur afin que vous puissiez simplement cloner discourse, puis exécuter un playbook pour obtenir Ruby et imagemagick et tout le reste aux bonnes versions ?

1 « J'aime »

Autant que je sache, presque tout le monde dans l’équipe de développement utilise un environnement de développement natif.

J’utilise asdf pour gérer les versions des nombreux outils que j’utilise, donc pour moi, il suffit de

asdf install ruby 3.1.3
asdf local ruby 3.1.3

pour faire fonctionner Discourse dans la nouvelle version de Ruby.

Très utile pour moi car je fais des benchmarks de Discourse sur différentes versions de Ruby et je gère la mise à niveau de Ruby.

5 « J'aime »

J’ai opté pour une solution Docker Compose pour le moment, avec un Dockerfile déterminant la construction de Discourse sur lequel je travaille. Pour les choses basiques, cela fonctionne bien jusqu’à présent, mais c’est évidemment un peu plus lent qu’un environnement Ubuntu direct « sur le métal »…

2 « J'aime »

Hors sujet, ouais, très impressionné par le YJIT !!.. est-ce que Discourse supporte déjà complètement Ruby 3.2 ?

4 « J'aime »

Existe-t-il un dépôt secret qu’ils utilisent tous pour maintenir les choses à jour ?

Merci ! asdf est d’une grande aide ! Je pense l’avoir déjà vu auparavant mais je voulais éviter Yet Another Package Manager (Encore un autre gestionnaire de paquets). Si c’est suffisant pour vous, je suis partant.

Et il semble que nodejs soit obsolète dans le script d’installation également. Une installation récente a la version v18.12.1 et le script installe la version 16.

Donc, il semble 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

En supposant que vous obteniez ceci dans votre .bashrc (ou similaire) d’une manière ou d’une autre :

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

Et l’installation de ces 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

Certains d’entre eux, je les ai peut-être ajoutés pour une raison autre que Discourse, bien que je ne sois pas tout à fait sûr.

Et

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

(Probablement pas dans cet ordre) s’en approche assez. Le redis actuel inclus avec ubuntu est suffisant pour 99% des développeurs (c’est 7.0.7 et pas 6.x) Oh ! 7.0.7 est maintenant ce qui est inclus. Mais il existe également un plugin asdf pour redis.

Un tel script serait alors facile à maintenir dans le cœur lorsque le numéro de version de node, imagemagick ou Ruby serait mis à jour, et un développeur paresseux pourrait exécuter ce script une fois par semaine ou à chaque nouveau pull et avoir un environnement de développement à jour. Avec une heure ou trois, quelqu’un d’intelligent pourrait le rendre suffisamment multiplateforme pour Linux, Mac/homebrew et Windows/WSL en quelques heures. Heureusement, je n’ai pas un accès facile à Windows de nos jours, donc je ne me porte pas volontaire.

Mais je pense que si je surveille les changements dans discourse_docker, je remarquerai peut-être quand ceux-ci seront mis à jour et mes ajouts bricolés à mon playbook Ansible newmachine pourraient maintenant faire l’affaire.

Merci pour le tuyau ! Je pense que je peux maintenant avoir une configuration de développement sur n’importe quelle machine avec une seule commande.

1 « J'aime »

Bien que je puisse voir à quel point ce serait formidable d’avoir tout cela géré automatiquement, pour moi, gérer mon environnement de développement, les mises à jour et tout le reste, est une partie essentielle du travail.

C’est nul pour les nouveaux arrivants, et c’est là que des outils comme GitHub Codespaces brillent, mais pour les personnes qui travaillent au quotidien sur le développement de Discourse, comprendre et pouvoir manipuler l’environnement de développement est utile pour comprendre comment les différentes parties s’assemblent.

2 « J'aime »

Eh bien, le gars qui fait du benchmarking Ruby est loin d’être un développeur typique, mais c’est juste ! Je suppose que nous sommes tous un peu différents dans notre façon de gérer les choses de toute façon.

Merci pour votre recommandation asdf, je pense qu’avec cela, je serai en mesure de garder les choses en ordre sur mes différentes machines.

1 « J'aime »

J’ai déjà fait la majeure partie du travail de compatibilité lors de la mise en place de la version 3.1, nous sommes donc déjà prêts pour la transition vers la 3.2 et nous le ferons bientôt.

4 « J'aime »

Falco, puis-je vérifier ceci avec vous ? :

rake dev:populate

semble maintenant produire une erreur :

Psych::DisallowedClass: Tentative de chargement d'une classe non spécifiée : Date

Est-ce lié à une nouvelle version de Ruby ou de Rails ?

Plus :

Je me demande à quel point le TTFB s’améliorera avec le nouveau YJIT

1 « J'aime »

Ce problème semble résolu dans la dernière version, merci à celui qui l’a corrigé ! :pray: C’est une fonctionnalité essentielle pour aider à construire efficacement des fixtures de test.

1 « J'aime »

Ce sujet a été automatiquement fermé 30 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.