Développer avec Docker
Puisque Discourse fonctionne dans Docker, vous devriez pouvoir exécuter Discourse directement depuis votre répertoire source en utilisant un conteneur de développement Discourse.
Avantages : Pas besoin d’installer de dépendances système, aucune configuration requise pour mettre en place rapidement un environnement de développement.
Inconvénients : Sera légèrement plus lent que l’environnement de développement natif sur Ubuntu, et beaucoup plus lent qu’une installation native sur macOS.
Voir également Developing Discourse using a Dev Container
Étape 1 : Installer 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
Vous pouvez exécuter les commandes ci-dessus dans WSL, mais vous devez avoir tous les fichiers dans le système de fichiers WSL. Par exemple, cela fonctionne parfaitement si les fichiers sont dans ~/discourse, mais échoue s’ils sont placés dans /mnt/c/discourse.
macOS
L’image Docker de développement Discourse n’est disponible que pour les architectures x86_64. Les Mac M1 peuvent démarrer l’image en utilisant l’émulation d’architecture, mais Discourse risque de ne pas démarrer en raison de l’absence de support inotify dans QEMU.
À la place, vous devriez utiliser Install Discourse on macOS for development
Option 1 : Téléchargez un package .dmg depuis le Docker store
Option 2 : brew install docker
Étape 2 : Démarrer le conteneur
Clonez le dépôt Discourse sur votre appareil local.
git clone https://github.com/discourse/discourse.git
cd discourse
(depuis votre racine source)
d/boot_dev --init
# attendez pendant que :
# - les dépendances sont installées,
# - la base de données est migrée, et
# - un utilisateur administrateur est créé (vous devrez interagir avec cela)
# Dans un terminal :
d/rails s
# Et dans un terminal séparé
d/dev --only ember
…puis ouvrez un navigateur sur http://localhost:3000 et voilà ! Vous devriez voir Discourse.
Liens symboliques pour les plugins
Le flux de développement Docker prend en charge les liens symboliques dans le répertoire plugins/, avec la réserve suivante :
Chaque fois qu’un nouveau lien symbolique de plugin est créé, le conteneur Docker doit être redémarré avec :
d/shutdown_dev; d/boot_dev
Remarques :
-
Pour tester les e-mails, exécutez MailHog :
d/mailhog -
S’il manque des gems, exécutez :
d/bundle install -
Si une migration de base de données est nécessaire :
d/rake db:migrate RAILS_ENV=development -
Lorsque vous avez terminé, vous pouvez choisir de tuer le conteneur Docker avec :
d/shutdown_dev -
Les données sont persistantes entre les exécutions du conteneur dans votre répertoire source
tmp/postgres. Si vous souhaitez réinitialiser votre base de données pour une raison quelconque, exécutez :sudo rm -fr data -
Si vous voyez des erreurs comme « permission denied while trying to connect to Docker », exécutez :
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Si vous souhaitez exposer globalement les ports du conteneur vers le réseau (désactivé par défaut), utilisez :
d/boot_dev -p -
Le Dockerfile provient de discourse/discourse_docker sur GitHub, en particulier image/discourse_dev.
Exécuter les tests
d/rake autospec
Pour exécuter des tests spécifiques à un plugin, vous pouvez également faire quelque chose comme ceci :
d/rake plugin:spec["discourse-follow"]
Ou même quelque chose comme ceci pour être encore plus précis :
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
Ce document est sous contrôle de version - proposez des modifications sur GitHub.