Mantenere un ambiente di sviluppo aggiornato

Sto cercando di configurare una nuova macchina per sviluppatori e bundler manca. Ho guardato https://raw.githubusercontent.com/discourse/install-rails/master/linux e vedo che sta ancora installando ruby_version="2.7.6". E rieseguire quello script non è mai sembrato un modo molto affidabile per aggiornare una macchina per sviluppatori.

Come fanno gli altri? Usano davvero tutti Install Discourse for development using Docker?

Per sviluppare la mia dashboard, passo una serie di impostazioni sulla riga di comando con uno script pfaffmanager-discourse che estrarrà anche l’ultima versione di discourse e migrerà il database. Immagino di poter fare in modo che ciò accada in qualche modo anche nella versione docker.

Sto solo pensando in modo “vecchia scuola” che dovrei avere un’istanza di sviluppo nativa piuttosto che farla in docker?

Uso ansible per configurare nuove macchine tutto il tempo, l’unica cosa che manca a quella configurazione è uno script di sviluppo per discourse. Qualcun altro vorrebbe una cosa del genere? Potremmo spostarla nel core in modo che tu possa semplicemente clonare discourse e quindi eseguire una playbook per ottenere Ruby e imagemagick e qualsiasi altra cosa nelle versioni corrette?

1 Mi Piace

Per quanto ne so, quasi tutti nel team di sviluppo utilizzano un ambiente di sviluppo nativo.

Ho usato asdf per gestire le versioni dei molti strumenti che uso, quindi per me è solo un

asdf install ruby 3.1.3
asdf local ruby 3.1.3

per far funzionare Discourse nel nuovo Ruby.

Molto utile per me dato che sto confrontando le prestazioni di Discourse tra le varie versioni di ruby e gestendo l’aggiornamento di Ruby.

5 Mi Piace

Per ora sono passato a una soluzione Docker Compose, con un Dockerfile che determina la build di Discourse su cui sto lavorando. Per le cose basilari sta funzionando bene finora, ma è ovviamente un po’ più lento di un ambiente Ubuntu diretto “on the metal”…

2 Mi Piace

Fuori tema, sì, molto colpito dallo YJIT!!.. Discourse supporta già completamente Ruby 3.2?

4 Mi Piace

C’è qualche repository segreto che usano tutti per mantenere aggiornate le cose?

Grazie! asdf è di grande aiuto! Penso di averlo già visto, ma volevo evitare Yet Another Package Manager. Se è abbastanza buono per te, sono completamente d’accordo.

E sembra che anche nodejs sia obsoleto nello script di installazione. Un’installazione recente ha la v18.12.1 e lo script installa la 16.

Quindi sembra che

          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

Supponendo che tu ottenga questo nel tuo .bashrc (o simile) in qualche modo:

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

E installando queste gem:

      - 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

Alcuni di questi potrei averli aggiunti per qualche motivo diverso da Discourse, anche se non ne sono del tutto sicuro.

E

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

(Probabilmente non in quest’ordine) Si avvicina abbastanza. L’attuale redis incluso con ubuntu è abbastanza buono per il 99% degli sviluppatori (è 7.0.7 e non 6.x) Oh! 7.0.7 è ora quello incluso. Ma c’è anche un plugin asdf per redis.

Uno script del genere sarebbe quindi molto facile da mantenere nel core quando ci fosse un aumento di versione in node, imagemagick o Ruby, e poi uno sviluppatore pigro potrebbe eseguire quello script una volta alla settimana o con ogni nuovo pull e avere un ambiente di sviluppo aggiornato. Con un’ora o tre qualcuno di intelligente potrebbe renderlo abbastanza multipiattaforma per Linux, Mac/homebrew e Windows/WSL in un paio d’ore. Fortunatamente non ho un facile accesso a Windows in questi giorni, quindi non mi offro volontario.

Ma penso che se monitoro le modifiche a discourse_docker forse noterò quando quelle verranno aggiornate e le mie aggiunte improvvisate al mio playbook Ansible newmachine potrebbero ora fare il lavoro.

Grazie per il suggerimento! Penso di poter ora avere una configurazione di sviluppo su qualsiasi macchina con un singolo comando.

1 Mi Piace

Sebbene possa capire quanto sarebbe bello avere tutto gestito automaticamente, per me gestire il mio ambiente di sviluppo, gli aggiornamenti e tutto il resto, è una parte essenziale del lavoro.

È un peccato per i nuovi arrivati, ed è qui che strumenti come GitHub Codespaces brillano, ma per le persone che lavorano quotidianamente allo sviluppo di Discourse, capire e poter manipolare l’ambiente di sviluppo è utile per comprendere come le parti si incastrano.

2 Mi Piace

Beh, il tizio che fa il benchmarking di Ruby è ben lontano dall’essere uno sviluppatore tipico, ma giusto! Immagino che siamo tutti un po’ diversi nel modo in cui ci piace gestire le cose, comunque.

Grazie alla tua raccomandazione di asdf, penso che con quello sarò in grado di tenere le cose in ordine sulle mie varie macchine.

1 Mi Piace

Ho già fatto la maggior parte del lavoro di compatibilità durante la spinta del 3.1, quindi siamo già a posto per il passaggio al 3.2 e lo faremo presto.

4 Mi Piace

Falco, potrei controllarlo con te?:

rake dev:populate

ora sembra produrre un errore:

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

È correlato alla nuova versione di Ruby o Rails?

Di più:

Mi chiedo quanto migliorerà il TTFB con il nuovo YJIT

1 Mi Piace

Questo problema sembra risolto nell’ultima versione, grazie a chiunque l’abbia risolto! :pray: È una funzionalità fondamentale per aiutare a creare in modo efficiente i test fixture.

1 Mi Piace

Questo argomento è stato chiuso automaticamente 30 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.