Manter um ambiente de desenvolvimento atualizado

Estou tentando configurar uma nova máquina de desenvolvimento e o bundler está faltando. Eu olho em https://raw.githubusercontent.com/discourse/install-rails/master/linux e vejo que ele ainda está instalando ruby_version="2.7.6". E reexecutar esse script nunca pareceu uma maneira muito confiável de atualizar uma máquina de desenvolvimento.

Como mais alguém faz isso? Todo mundo está realmente usando Install Discourse for development using Docker?

Para desenvolver meu painel, passo várias configurações na linha de comando com um script pfaffmanager-discourse que também buscará o último discourse e migrará o banco de dados. Acho que posso dar um jeito de fazer isso de alguma forma na versão docker também.

Estou apenas pensando à moda antiga que deveria ter uma instância de desenvolvimento nativa em vez de fazê-lo no docker?

Eu uso ansible para configurar novas máquinas o tempo todo, a única coisa que falta nessa configuração é um script de desenvolvimento discourse. Mais alguém gostaria de tal coisa? Poderíamos movê-lo para o núcleo para que você pudesse apenas clonar discourse e, em seguida, executar um playbook para obter Ruby e imagemagick e qualquer outra coisa nas versões corretas?

1 curtida

Tanto quanto sei, quase todos na equipe de desenvolvimento usam um ambiente de desenvolvimento nativo.

Eu tenho usado asdf para gerenciar versões para as muitas ferramentas que uso, então para mim é apenas um

asdf install ruby 3.1.3
asdf local ruby 3.1.3

para fazer o Discourse rodar no novo Ruby.

Muito útil para mim, já que tenho feito benchmarks do Discourse em várias rubies e lidado com a atualização do Ruby.

5 curtidas

Eu mudei para uma solução Docker Compose por enquanto, com um Dockerfile determinando a compilação do Discourse em que estou trabalhando. Para coisas básicas, isso está funcionando bem até agora, mas é obviamente um pouco mais lento do que um ambiente Ubuntu direto “no metal”…

2 curtidas

Fora do tópico, sim, muito impressionado com o YJIT!!.. o Discourse já suporta completamente o Ruby 3.2?

4 curtidas

Existe algum repositório secreto que eles usam para manter as coisas atualizadas?

Obrigado! O asdf é uma grande ajuda! Acho que já o vi antes, mas queria evitar “Mais um Gerenciador de Pacotes”. Se é bom o suficiente para você, estou dentro.

E parece que o nodejs está desatualizado no script de instalação também. Uma instalação recente tem v18.12.1 e o script instala a versão 16.

Então, 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

Assumindo que você consiga isso no seu .bashrc (ou similar) de alguma forma:

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

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

Algumas delas eu posso ter adicionado por algum motivo que não seja o Discourse, embora eu não tenha certeza.

E

apt-get install -y git build-essential libxslt1-dev libcurl4-openssl-dev libksba8 \\\nlibksba-dev libreadline-dev libssl-dev zlib1g-dev libsnappy-dev \\\nsqlite3 libsqlite3-dev postgresql postgresql-server-dev-all \\\npostgresql-contrib libpq-dev redis-server golang-go \ngo get github.com/mailhog/MailHog

(Provavelmente não nessa ordem) Chega bem perto. O redis atual incluído com o ubuntu é Bom o Suficiente para 99% dos desenvolvedores (é 7.0.7 e não 6.x) Ah! 7.0.7 é o que está incluído agora. Mas existe um plugin asdf para redis também.

Um script assim seria então bem fácil de manter no core quando houvesse um aumento de versão no node, imagemagick ou Ruby, e então um desenvolvedor preguiçoso poderia executar esse script uma vez por semana ou a cada novo pull e ter um ambiente de desenvolvimento atualizado. Com uma hora ou três, alguém inteligente poderia torná-lo multiplataforma o suficiente para Linux, Mac/homebrew e Windows/WSL em algumas horas. Felizmente, não tenho acesso fácil ao Windows hoje em dia, então não estou me voluntariando.

Mas acho que se eu observar as mudanças em discourse_docker, talvez eu note quando elas forem atualizadas e minhas adições improvisadas ao meu playbook ansible newmachine podem agora fazer o trabalho.

Obrigado pela dica! Acho que agora posso ter uma configuração de desenvolvimento em qualquer máquina com um único comando.

1 curtida

Embora eu possa ver como seria legal ter tudo isso tratado automaticamente, para mim, gerenciar meu ambiente de desenvolvimento, atualizações e tudo mais, é uma parte essencial do trabalho.

É ruim para os novatos, e é aí que ferramentas como o GitHub Codespaces brilham, mas para as pessoas que estão no dia a dia do desenvolvimento do Discourse, entender e ser capaz de manipular o ambiente de desenvolvimento é útil para entender como as partes se encaixam.

2 curtidas

Bem, o cara que faz benchmarking de Ruby está longe de ser um desenvolvedor típico, mas tudo bem! Acho que todos nós somos um pouco diferentes em como gostamos de gerenciar as coisas, de qualquer forma.

Graças à sua recomendação de asdf, acho que com isso conseguirei manter as coisas organizadas em minhas várias máquinas.

1 curtida

Eu já fiz a maior parte do trabalho de compatibilidade no push 3.1, então já estamos todos prontos para a mudança para 3.2 e faremos isso em breve.

4 curtidas

Falco, posso verificar isto com você?:

rake dev:populate

agora parece produzir um erro:

Psych::DisallowedClass: Tentou carregar classe não especificada: Date

Isso está relacionado a uma nova versão do Ruby ou Rails?

Mais:

Gostaria de saber o quanto o TTFB melhorará com o novo YJIT

1 curtida

Este problema parece resolvido na versão mais recente, obrigado a quem o corrigiu! :pray: É uma instalação crítica para ajudar a construir fixtures de teste de forma eficiente.

1 curtida

Este tópico foi fechado automaticamente 30 dias após a última resposta. Novas respostas não são mais permitidas.