Aquí está lo que hice. Inicié sesión en el servidor y entré en el contenedor de Docker.
-
crea una carpeta llamada
gems -
crea un subdirectorio
2.7.5(versión de Ruby utilizada por Discourse en producción entests-passed) -
vuelve a la carpeta
gems -
Ejecuta comandos de esta manera
RUBY_VERSION=2.7.5 gem install pkg-config -v 1.4.7 -i $RUBY_VERSION --no-document --ignore- dependencies --no-user-install gem install mkmfmf -v 0.4 -i $RUBY_VERSION --no-document --ignore-dependencies --no-user-install ...Nota: estos son exactamente los mismos comandos que Discourse ejecuta (intenta ejecutar, pero falla) para instalar los gems.
-
Ahora comprime esta carpeta.
-
Sal del contenedor de Docker y copia el zip fuera del contenedor de Docker usando el comando
docker cp. -
Conéctate a tu servidor a través de FileZilla o VSCode y descarga el zip.
-
extráelo en la carpeta raíz de tu plugin. Así, tu carpeta de plugin ahora tendrá el directorio
gems. -
Ahora sube la carpeta
gemscon el plugin a GitHub.
Ahora, cuando hagas una reconstrucción en Discourse con este plugin, Discourse usará las dependencias que le proporcionaste y no intentará instalarlas. Esta es una solución temporal y deberá rehacerse una vez que Discourse actualice la versión de Ruby.
Pero aquí está la gran pregunta: ¿por qué los mismos comandos que funcionan cuando se ejecutan desde la terminal fallan cuando Discourse intenta ejecutarlos? Realmente valdría la pena investigarlo y espero que haya una solución simple.