I, [2020-12-05T10:59:38.848743 #1] INFO -- : > cd /var/www/discourse && git remote set-branches origin v2.6.0
I, [2020-12-05T10:59:38.852600 #1] INFO -- :
I, [2020-12-05T10:59:38.852639 #1] INFO -- : > cd /var/www/discourse && git fetch --depth 1 origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T10:59:41.405163 #1] INFO -- :
I, [2020-12-05T10:59:41.405307 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
error: pathspec 'v2.6.0' did not match any file(s) known to git
I, [2020-12-05T10:59:41.411796 #1] INFO -- :
En lugar de la salida esperada al utilizar el commit anterior a ese:
I, [2020-12-05T11:22:14.717910 #1] INFO -- : > cd /var/www/discourse && git fetch origin v2.6.0
From https://github.com/discourse/discourse
* tag v2.6.0 -> FETCH_HEAD
I, [2020-12-05T11:22:15.672616 #1] INFO -- :
I, [2020-12-05T11:22:15.672683 #1] INFO -- : > cd /var/www/discourse && git checkout v2.6.0
Note: checking out 'v2.6.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at d6121249d3 Version bump to v2.6.0
No lo llamaría un bug en sí mismo, pero queremos ofrecer alguna especie de instrucciones sobre cómo instalar versiones antiguas de Discourse, incluso si eso implica una plantilla más complicada o algo similar.
Estoy de acuerdo en que la profundidad debería ser configurable, quizás mediante una variable de entorno, con un valor predeterminado de “shallow”; pero que sea configurable con una simple variable de entorno.
Creo que el problema aquí es que las etiquetas no se conocen localmente al realizar el checkout, como en el siguiente problema (no relacionado con Discourse):
Ejecutar git fetch --all debería resolver el problema, pero no sé cuánto podría aumentar el tamaño de la imagen (a menos que otra instrucción elimine las referencias no utilizadas más adelante).
Dicho esto, creo que git clone --depth 1 https://github.com/discourse/discourse.git --branch=$version lo solucionaría, ya que la opción --branch permite tanto ramas como etiquetas, pero no lo he probado y no sé si hay alguna razón para que el clone utilice (actualmente) la rama master.
Al ejecutar git clone --depth 1 https://github.com/discourse/discourse.git --branch=v2.6.0, el tamaño total de la carpeta es de 212MB, y la carpeta .git dentro tiene 46MB, así que creo que está bien.
El problema es que, en el momento de la construcción de la imagen, no sé qué rama querrás en el futuro.
La configuración actual se modificó para reducir el tamaño de la imagen, logrando una reducción del 25 % en su tamaño comprimido (250 MB), lo cual es una gran ventaja. Funciona correctamente cuando se utilizan ramas normales como stable y beta o tests-passed.
Como solución alternativa, si deseas cambiar a una etiqueta, puedes aplicar esto a tu archivo app.yml:
Otra solución alternativa consiste en agregar una clave base_image en el nivel superior de app.yml con el valor de una imagen base más antigua. Dado que ni siquiera intentamos mantener la compatibilidad de las nuevas imágenes para ejecutar versiones antiguas de Discourse, esto puede ser necesario si retrocedes lo suficiente en el tiempo.
Tienes razón, en ese momento no conocemos la versión; parece que la imagen base utiliza la versión actual más la rama tests-passed, aunque la rama tendrá el commit correspondiente al momento en que se construyó la imagen.
¿No tendría el método actual reconstrucciones más lentas, incluso cuando se usa la rama tests-passed?
Simplemente considera las siguientes instrucciones:
Cuando se ejecuta `git pull`, **se descarga todo el repositorio**, lo que puede tardar varios minutos, ya que antes solo se hizo un clonado superficial. Puedes probar ejecutando solo las instrucciones anteriores localmente y verás.
No digo que sea mejor tener todo el repositorio en la imagen base, pero el código en `web.template.yml` se ejecutará en cada reconstrucción, incluso si solo se agregó un plugin o se cambió una configuración en `app.yml`. Lo que normalmente hago en mis proyectos (que no son de Discourse) es crear una nueva imagen para cada nueva versión, pero eso puede no ser viable para ti (considerando cómo lo haces actualmente).
¿No has notado algún aumento en el tiempo de reconstrucción? (o quizás no es tan significativo en comparación con el tiempo total de reconstrucción en la mayoría de los casos)
Actualización
Volví a probar los pasos anteriores y fueron rápidos. Supongo que en el primer intento ejecuté otra instrucción que modificó el árbol de git y, al final, intenté descargar todo cuando ejecuté git pull.
Sí, veo que realiza un fetch y luego un checkout en la rama correcta después del pull, así que creo que el git pull no es necesario (aunque no lo he probado).
En cuanto a las etiquetas, parece que aún necesito obtenerlas por separado, pero parece viable. Además, las ramas se utilizan con más frecuencia, por lo que las etiquetas deberían ser más bien un caso excepcional.
Estoy obteniendo el mismo error. Estaba usando la versión 2.5.1.
Al hacer esto, obtengo el siguiente error:
I, [2020-12-31T11:50:24.701475 #1] INFO -- : > cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+
chown: no se puede hacer referencia a '/var/www/discourse/public/plugins/styleguide': No existe el archivo o el directorio
Gracias por aclararlo: esa es exactamente la parte que me faltaba. Para quienes estén confundidos de la misma manera que yo, obtener una etiqueta de lanzamiento de Discourse se puede hacer de la siguiente manera:
Asegurarse de que el parámetro versionno esté establecido en app.yml, por ejemplo: