Como lamenté aquí, a menudo siento que paso más tiempo intentando mantener mi entorno de desarrollo actualizado que escribiendo código.
Tengo un script que uso para iniciar Discourse con una serie de configuraciones de ENV que también hace un montón de otras cosas. Hoy falló al obtener la versión correcta de nodejs y pasé mucho más tiempo actualizándolo. Incluso hice cosas como grep para eliminar la salida ruidosa de asdf y similares. Aquí está la sección que actualiza Discourse.
Esto es lo que hace:
- Recupera y/o actualiza los repositorios all-the-plugins y all-the-themes. Estos son muy útiles para encontrar ejemplos de cómo hacer las cosas. Si se han descargado en los últimos 100 minutos, omite este paso.
docker pullla última versión base (perder este paso crucial es la razón por la que pasé mucho tiempo en esto hoy; de alguna manera pensé que hacer ungit pullendiscourse_dockerlo haría
)docker runla imagen base para obtener las versiones de Ruby, Imagemagick y node; luego usaasdfpara instalar y aplicar globalmente esas versiones. (Asume que tienesasdf; yo me encargo de eso en mi scriptnewmachine).- En el directorio de discourse, haz checkout a main, git pull, ejecuta pnpm update y dedupe.
- Migra la base de datos y la base de datos de prueba.
No lo he probado en ningún otro lugar que no sea Linux (Pop!_OS, que es mayormente Ubuntu).
SRC=~/src/discourse-repos
DISCOURSE_SRC=/home/pfaffman/src/discourse-repos/discourse
ALL_THE_PLUGINS=~/src/discourse-repos/all-the-plugins
ALL_THE_THEMES=~/src/discourse-repos/all-the-themes
ARG=$1
COMMAND=""
if [[ "$ARG" == "update" ]] || [[ "$ARG" == "upgrade" ]]
then
# NOTA: si bundler está roto, intenta `gem install bundler -v 2.5.3`
if ! [[ -d $ALL_THE_PLUGINS ]]; then
echo "FALTAN LOS PLUGINS"
cd $SRC
git clone https://github.com/discourse/all-the-plugins
cd $ALL_THE_PLUGINS
./reset-all-repos
fi
cd $ALL_THE_PLUGINS
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\nActualizando los plugins\n "
./reset-all-repos
fi
if ! [[ -d $ALL_THE_THEMES ]]; then
echo "¡¡¡FALTAN LOS TEMAS!!!"
sleep 5
cd $SRC
git clone https://github.com/discourse/all-the-themes
cd $ALL_THE_THEMES
./reset-all-repos
fi
cd $ALL_THE_THEMES
if [ -z "$(find official -mmin -100)" ]; then
echo -e "\nActualizando temas. . .\n"
./reset-all-repos
fi
asdf plugin add ruby |grep -v "already"
asdf plugin add imagemagick |grep -v "already"
asdf plugin update --all > /dev/null
docker pull discourse/base:release
RUBY_VERSION=$(docker run discourse/base:release bash -c 'ruby --version'|cut -d' ' -f2)
echo "Obtenida RUBY_VERSION $RUBY_VERSION"
asdf install ruby $RUBY_VERSION|grep -v "already"
asdf global ruby $RUBY_VERSION|grep -v "already"
IMAGE_MAGICK_VERSION=$(docker run discourse/base:release bash -c 'convert --version'|head -1|cut -d' ' -f3)
echo "Obtenida IMAGE_MAGICK_VERSION: $IMAGE_MAGICK_VERSION"
asdf install imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
asdf global imagemagick $IMAGE_MAGICK_VERSION|grep -v "already"
# 2025-01-13 obtener la versión de node desde el contenedor base!
NODE_VERSION=$(docker run discourse/base:release bash -c 'node --version'|cut -d'v' -f2)
echo "OBTENIDA versión de NODEJS: $NODE_VERSION"
asdf install nodejs $NODE_VERSION|grep -v "already"
asdf global nodejs $NODE_VERSION|grep -v "already"
npm install -g pnpm
# fin de las actualizaciones de versión
cd $DISCOURSE_SRC
git checkout main
git pull
bundle install
echo -e "\n-----------> Ejecutando pnpm update. . .\n"
pnpm update
echo -e "\n-----------> Ejecutando pnpm dedupe. . .\n"
pnpm dedupe
echo -e "\n-----------> Migrando las bases de datos. . .\n"
LOAD_PLUGINS=1 ./bin/rake db:migrate
LOAD_PLUGINS=1 RAILS_ENV=test ./bin/rake db:migrate
exit
fi