Sviluppo con Docker
Dato che Discourse viene eseguito in Docker, dovresti essere in grado di eseguire Discourse direttamente dalla tua directory di origine utilizzando un container di sviluppo di Discourse.
Vantaggi: Nessuna necessità di installare dipendenze di sistema, nessuna configurazione richiesta per configurare rapidamente un ambiente di sviluppo.
Svantaggi: Sarà leggermente più lento dell’ambiente di sviluppo nativo su Ubuntu e molto più lento di un’installazione nativa su MacOS.
Vedi anche Developing Discourse using a Dev Container
Passo 1: Installare 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
È possibile eseguire i comandi precedenti all’interno di WSL ma è necessario avere tutti i file all’interno del file system WSL. Ad esempio, funziona bene se si trova all’interno di ~/discourse ma fallisce se è posizionato all’interno di /mnt/c/discourse.
MacOS
L’immagine docker di sviluppo di Discourse è disponibile solo per architetture x86_64. Le Macchine M1 sono in grado di avviare l’immagine utilizzando l’emulazione dell’architettura, ma è improbabile che Discourse si avvii a causa della mancanza di supporto inotify in QEMU.
Invece, dovresti usare Install Discourse on macOS for development
Opzione 1: Scarica un .dmg pacchettizzato dallo store di Docker
Opzione 2: brew install docker
Passo 2: Avviare il Container
Clona il repository Discourse sul tuo dispositivo locale.
git clone https://github.com/discourse/discourse.git
cd discourse
(dalla tua radice sorgente)
d/boot_dev --init
# attendi mentre:
# - le dipendenze vengono installate,
# - il database viene migrato, e
# - viene creato un utente admin (dovrai interagire con questo)
# In un terminale:
d/rails s
# E in un terminale separato
d/ember-cli
…quindi apri un browser su http://localhost:4200 e voilà!, dovresti vedere Discourse.
Collegamenti simbolici dei Plugin
Il flusso di sviluppo Docker supporta i collegamenti simbolici sotto la directory plugins/, con la seguente avvertenza:
Ogni volta che viene creato un nuovo collegamento simbolico di un plugin, il container Docker deve essere riavviato con:
d/shutdown_dev; d/boot_dev
Note:
-
Per testare le email, esegui MailHog:
d/mailhog -
Se mancano delle gem, esegui:
d/bundle install -
Se è necessaria una migrazione del db:
d/rake db:migrate RAILS_ENV=development -
Quando hai finito, puoi scegliere di terminare il container Docker con:
d/shutdown_dev -
I dati vengono mantenuti tra le invocazioni del container nella directory
tmp/postgresdella tua radice sorgente. Se per qualsiasi motivo desideri reimpostare il tuo database, esegui:sudo rm -fr data -
Se vedi errori come “permission denied while trying to connect to Docker”, esegui:
run `sudo usermod -aG docker ${USER}` sudo service docker restart -
Se desideri esporre globalmente le porte dal container alla rete (disattivato di default) usa:
d/boot_dev -p -
Il Dockerfile proviene da discourse/discourse_docker su GitHub, in particolare image/discourse_dev.
Esecuzione dei Test
d/rake autospec
Per eseguire test di plugin specifici, puoi anche fare qualcosa di simile:
d/rake plugin:spec["discourse-follow"]
O anche qualcosa di simile per essere ancora più specifico:
my-machine:~/discourse$ d/shell
discourse@discourse:/src$ RAILS_ENV=test /src/bin/rspec plugins/discourse-follow/spec/lib/updater_spec.rb:37
Questo documento è controllato in versione - suggerisci modifiche su github.