He estado trabajando en un importador personalizado para poder importar datos de nuestro foro de Woltlab a Discourse. Lo hice ejecutando Discourse directamente en mi máquina de desarrollo sin Docker, y ahora tengo un montón de archivos en script/import_scripts/ que contienen mi código de migración. Esos archivos residen en una bifurcación del repositorio oficial de Discourse de GitHub por ahora.
Me gustaría migrar a una instalación oficial basada en Docker ahora, pero necesitaré que mi código de importación esté disponible en la nueva instalación durante algún tiempo, ya que la migración deberá realizarse de forma continua. Si es posible, me gustaría mantener el código del importador en un repositorio separado y hacerlo disponible en la instalación de producción de una manera limpia.
Mi conocimiento de Rails es limitado, por lo que puedo estar perdiendo un enfoque obvio. ¿Alguien puede indicarme la dirección correcta?
En este caso, sugeriría una de las siguientes opciones:
Durante la migración continua, basa tu instancia en tu fork. Si quieres incluir nueva funcionalidad, simplemente sincroniza tu fork con el upstream de forma regular. Cuando la migración termine, vuelve a cambiar a discourse/discourse
Clona tu repositorio fuera de docker y copia los archivos. Hazlo después de una reconstrucción, de lo contrario, el script de precompilación encontrará el repositorio sucio y la compilación tardará mucho más.
He cambiado la URL del repositorio dentro del contenedor de Docker y he podido ejecutar mi importador. Sin embargo, cuando ejecuté ./launcher rebuild app, el repositorio se restableció a la versión original. He revisado el Dockerfile y parece que codifica la ruta del repositorio, pero tampoco parece que el contenedor base se construya localmente, por lo que los cambios en el Dockerfile no tienen el efecto deseado. ¿Hay alguna forma autorizada de hacer que esto funcione?
Sugiero trabajar con dos contenedores. Puedes hacerlo creando una copia de tu archivo app.yml actual (puedes encontrarlo en /var/discourse/containers) y renombrándolo a algo como import.yml. Luego actualiza el parámetro version a tu rama de importación personalizada.
params:
version: your-branch
Cada vez que necesites ejecutar la importación, detén el contenedor app, inicia el contenedor import y ejecuta el script dentro del contenedor import. Si se realizaron cambios significativos en Discourse, es posible que necesites hacer un rebase de tu rama con el último commit del núcleo y reconstruir el contenedor.
cd /var/discourse
./launcher enter import
# ¿quieres cambiar a una rama diferente?
su discourse -c 'git checkout <branch>'
# ¿quieres descargar nuevo código?
su discourse -c 'git pull'
Una vez que hayas terminado con la migración, detén el contenedor de importación y reinicia el de la aplicación.
cd /var/discourse
./launcher stop import
./launcher start app
Créditos a @gerhard quien me enseñó cómo hacer todo esto