Sviluppo con Docker
Poiché Discourse viene eseguito in Docker, dovresti essere in grado di eseguire Discourse direttamente dalla tua directory di origine utilizzando un container di sviluppo 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 che tutti i file si trovino 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: Scaricare un .dmg pacchettizzato dal Docker store
Opzione 2: brew install docker
Passo 2: Avviare il Container
Clonare il repository Discourse sul dispositivo locale.
git clone https://github.com/discourse/discourse.git
cd discourse
(dalla radice della 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 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 di origine. 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 (impostazione predefinita su off) 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ù specifici:
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 tramite versione - suggerisci modifiche su github.