Desarrollo con Docker
Dado que Discourse se ejecuta en Docker, deberías poder ejecutar Discourse directamente desde tu directorio fuente usando un contenedor de desarrollo de Discourse.
Ventajas: No es necesario instalar dependencias del sistema, no se necesita 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.
Ver 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 bien si está dentro de ~/discourse pero falla si se coloca dentro de /mnt/c/discourse.
MacOS
La imagen docker de desarrollo de Discourse solo está disponible para arquitecturas x86_64. Las Mac M1 son capaces de iniciar la imagen usando emulación de arquitectura, pero es poco probable que Discourse arranque debido a la falta de soporte para inotify en QEMU.
En su lugar, deberías usar Install Discourse on macOS for development
Opción 1: Descargar un .dmg empaquetado desde Docker store
Opción 2: brew install docker
Paso 2: Iniciar 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 fuente)
d/boot_dev --init
# espera mientras:
# - se instalan las dependencias,
# - se migra la base de datos, y
# - se crea un usuario administrador (necesitarás interactuar con esto)
# En una terminal:
d/rails s
# Y en una terminal separada
d/ember-cli
…luego abre un navegador en http://localhost:4200 y ¡listo!, deberías ver Discourse.
Symlinks de Plugins
El flujo de desarrollo de Docker soporta symlinks bajo el directorio plugins/, con la siguiente advertencia:
Cada vez que se crea un nuevo symlink 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 gems, ejecuta:
d/bundle install -
Si se necesita una migración de db:
d/rake db:migrate RAILS_ENV=development -
Cuando termines, puedes optar por detener el contenedor de Docker con:
d/shutdown_dev -
Los datos se persisten entre las invocaciones del contenedor en el directorio
tmp/postgresde tu raíz fuente. Si por alguna razón quieres restablecer tu base de datos, ejecuta:sudo rm -fr data -
Si ves errores como “permission denied while trying to connect to 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 de un plugin específico, 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.