Desarrollando con Docker
Dado que Discourse se ejecuta en Docker, deberías poder ejecutar Discourse directamente desde tu directorio de origen usando un contenedor de desarrollo de Discourse.
Ventajas: No es necesario instalar ninguna dependencia del sistema, no se requiere ninguna configuración para configurar rápidamente un entorno de desarrollo.
Desventajas: Será ligeramente más lento que el entorno de desarrollo nativo en Ubuntu, y mucho más lento que una instalación nativa en MacOS.
Consulta también Developing Discourse using a Dev Container
Paso 1: Instalar Docker
Ubuntu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
19.10
sudo apt-get install docker.io
sudo usermod -a -G docker $USER
sudo reboot
Windows WSL: Ubuntu
Puedes ejecutar los comandos anteriores dentro de WSL, pero debes tener todos los archivos dentro del sistema de archivos de WSL. Por ejemplo, funciona perfectamente si está dentro de ~/discourse, pero falla si se coloca dentro de /mnt/c/discourse.
MacOS
La imagen de Docker de desarrollo de Discourse solo está disponible para arquitecturas x86_64. Las Mac M1 pueden iniciar la imagen usando emulación de arquitectura, pero es poco probable que Discourse arranque debido a la falta de soporte inotify en QEMU.
En su lugar, deberías usar Install Discourse on macOS for development
Opción 1: Descarga un paquete .dmg desde la tienda de Docker
Opción 2: brew install docker
Paso 2: Iniciar el contenedor
Clona el repositorio de Discourse en tu dispositivo local.
git clone https://github.com/discourse/discourse.git
cd discourse
(desde la raíz de tu origen)
d/boot_dev --init
# espera mientras:
# - se instalan las dependencias,
# - se migra la base de datos, y
# - se crea un usuario administrador (tendrás que interactuar con esto)
# En una terminal:
d/rails s
# Y en una terminal separada
d/dev --only ember
…luego abre un navegador en http://localhost:3000 y ¡hecho!, deberías ver Discourse.
Enlaces simbólicos de plugins
El flujo de desarrollo de Docker admite enlaces simbólicos en el directorio plugins/, con la siguiente salvedad:
Siempre que se cree un nuevo enlace simbólico de plugin, el contenedor de Docker debe reiniciarse con:
d/shutdown_dev; d/boot_dev
Notas:
-
Para probar correos electrónicos, ejecuta MailHog :
d/mailhog -
Si faltan gemas, ejecuta:
d/bundle install -
Si se necesita una migración de db:
d/rake db:migrate RAILS_ENV=development -
Cuando hayas terminado, puedes elegir matar el contenedor de Docker con:
d/shutdown_dev -
Los datos se persisten entre invocaciones del contenedor en tu directorio de origen
tmp/postgres. Si por alguna razón quieres restablecer tu base de datos, ejecuta:sudo rm -fr data -
Si ves errores como «denegación de permiso al intentar conectarse a Docker», ejecuta:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Si deseas exponer globalmente los puertos del contenedor a la red (desactivado por defecto), usa:
d/boot_dev -p -
El Dockerfile proviene de discourse/discourse_docker en GitHub, en particular image/discourse_dev.
Ejecutar pruebas
d/rake autospec
Para ejecutar pruebas específicas de plugins, también puedes hacer algo como esto:
d/rake plugin:spec["discourse-follow"]
O incluso algo como esto para ser aún más específico:
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
Este documento está controlado por versiones: sugiere cambios en GitHub.