Installa Discourse per lo sviluppo usando Docker

Ciao,

Sto ricevendo questo errore quando provo a eseguire d/boot_dev --init

Errno::EACCES: Permesso negato @ dir_s_mkdir - tmp
/src/config/boot.rb:23:in `<top (required)>'
/src/config/application.rb:16:in `require'
/src/config/application.rb:16:in `<top (required)>'
/src/Rakefile:7:in `require'
/src/Rakefile:7:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(Consulta la traccia completa eseguendo il task con --trace)

Hai qualche idea su come risolvere? Ho provato a cercare ovunque ma non ho trovato soluzioni.

Modifica: l’ho risolto eseguendo chmod -R 777 ~/discourse, ma ora ricevo questo errore:

gifsicle worker: gifsicle non trovato; fornisci il binario corretto o disabilita questo worker (argomento --no-gifsicle o :gifsicle => false tramite opzioni)

2 Mi Piace

Questo non è un problema, abbiamo rimosso il nostro utilizzo di recente, l’avviso non è motivo di preoccupazione. Stai lavorando su un vecchio codice di Discourse?

4 Mi Piace

No, è stato il rilascio recente. Ma ho seguito questa guida di DigitalOcean e ora funziona perfettamente.

2 Mi Piace

Come si utilizzano i plugin in questo tipo di configurazione?
Sto cercando di seguire Install plugins on a self-hosted site, ma viene menzionato il file /var/discourse/containers/app.yml, che non esiste nella mia directory discourse.

Ho configurato con successo un ambiente di sviluppo per Discourse e riesco a testare la mia patch, ma come posso integrare la patch nella mia istanza di produzione? Ho provato a costruire base e poi eseguire ./launcher rebuild app --run-image discourse/base:build, ma non sembra che ciò porti all’avvio di un’istanza di Discourse funzionante.

Di solito ricevo un errore relativo al gruppo syslog mancante, ma ho commentato quella riga, eppure non ho ottenuto un sito funzionante. Inoltre, non c’è nulla di rilevante nei log di Docker.

Non documentiamo davvero questo tipo di cose, ma dovresti generare un file “diff” e poi applicare il diff in un hook dopo aver clonato il repository. app.yml supporta gli hook.

Una soluzione rapida e approssimativa per ambienti self-hosted con un singolo contenitore è semplicemente modificare il codice in loco ed eseguire sv restart unicorn.

2 Mi Piace

Non sono sicuro se questo sia il posto migliore per porre questa domanda, ma non sono riuscito a completare l’installazione di Discourse utilizzando Docker su un computer Apple M1.

Dopo aver eseguito d/boot_dev --init, tutte le dipendenze vengono installate senza apparenti problemi, ma una volta arrivato alla fase Migrating database, il processo rimane bloccato lì, consumando il 100% di uno dei miei core, senza sembrare fare progressi.

Ho provato ad accedere al contenitore Docker e il task bundle migrate è in esecuzione al 100%, ma non si nota alcuna attività apparente nel processo PostgreSQL.

Qualsiasi suggerimento sarebbe molto apprezzato!

1 Mi Piace

Penso che il supporto per la virtualizzazione sia davvero molto recente, non sorprende che sia un po’ un’avventura.

@pmusaraj / @david, avete avuto successo nel far funzionare docker-dev su M1?

5 Mi Piace

Non l’ho ancora provato.

2 Mi Piace

Se qualcuno riesce a eseguire Discourse con Docker su un Mac M1, per favore fatemelo sapere. Nel frattempo, cercherò di seguire la guida alternativa! Grazie!

1 Mi Piace

Ho provato brevemente oggi e mi sono bloccato allo stesso passaggio di te, ma con un errore:

Invalid gemspec in [/usr/local/lib/ruby/gems/2.7.0/specifications/default/zlib-1.1.0.gemspec]: Malformed version number string specification_version
bundler: failed to load command: rake (/usr/local/bin/rake)

Sì, fallo pure. Ci sono diversi membri del team che usano Discourse su M1 (io incluso) ogni giorno, quindi funziona molto bene!

Facci sapere se incontri problemi.

2 Mi Piace

Grazie mille per il tuo tempo e il tuo aiuto! Almeno non sono l’unico bloccato con questo problema.

Ciao, penso che dovremmo aggiungere una descrizione di Ember-CLI qui e creare una scorciatoia per il comando sottostante senza dover entrare nel container Docker.

Inoltre, non riesco a far funzionare i comandi sopra eseguiti all’interno del container; sembra che il container non esponga la porta 4200.
Screenshot from 2021-05-02 15-48-51

Ho esposto manualmente la porta 4200 modificando d/boot_dev:

Dopo il riavvio del container, accedendo a localhost:4200 ho ottenuto questo:

discourse@discourse:/tmp$ cat error.dump.cab4cc444229d44fc0fce2deb8695880.log 
=================================================================================

ENV Summary:

  TIME: Sun May 02 2021 08:01:12 GMT+0000 (Coordinated Universal Time)
  TITLE: ember
  ARGV:
  - /usr/bin/node
  - /src/app/assets/javascripts/node_modules/.bin/ember
  - server
  - --proxy
  - http://localhost:3000
  EXEC_PATH: /usr/bin/node
  TMPDIR: /tmp
  SHELL: /bin/bash
  PATH:
  - /tmp/yarn--1619942449179-0.1910991449592403
  - /src/app/assets/javascripts/discourse/node_modules/.bin
  - /home/discourse/.config/yarn/link/node_modules/.bin
  - /src/app/assets/javascripts/node_modules/.bin
  - /home/discourse/.yarn/bin
  - /usr/libexec/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/bin/node_modules/npm/bin/node-gyp-bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/sbin
  - /usr/bin
  - /sbin
  - /bin
  PLATFORM: linux x64
  FREEMEM: 8603062272
  TOTALMEM: 41962496000
  UPTIME: 612639
  LOADAVG: 3.32177734375,2.19580078125,1.47900390625
  CPUS:
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  ENDIANNESS: LE
  VERSIONS:
  - ares: 1.15.0
  - brotli: 1.0.7
  - cldr: 35.1
  - http_parser: 2.9.3
  - icu: 64.2
  - modules: 64
  - napi: 7
  - nghttp2: 1.41.0
  - node: 10.23.0
  - openssl: 1.1.1g
  - tz: 2019c
  - unicode: 12.1
  - uv: 1.34.2
  - v8: 6.8.275.32-node.59
  - zlib: 1.2.11

ERROR Summary:

  - broccoliBuilderErrorStack: [undefined]
  - code: ECONNREFUSED
  - codeFrame: [undefined]
  - errorMessage: connect ECONNREFUSED 127.0.0.1:3000
  - errorType: [undefined]
  - location:
    - column: [undefined]
    - file: [undefined]
    - line: [undefined]
  - message: connect ECONNREFUSED 127.0.0.1:3000
  - name: Error
  - nodeAnnotation: [undefined]
  - nodeName: [undefined]
  - originalErrorMessage: [undefined]
  - stack: Error: connect ECONNREFUSED 127.0.0.1:3000
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

=================================================================================

Dopo aver modificato la PORT in bin/ember-cli da 3000 a 9292, tutto funziona.
Screenshot from 2021-05-02 17-55-24

Sembra che lo script bash di ember-cli non riesca a funzionare correttamente con ENV["UNICORN_PORT"].

1 Mi Piace

Ember CLI è una nuova (e aspramente conquistata) evoluzione; @eviltrout dovrebbe essere in grado di commentare a riguardo a breve.

3 Mi Piace

Sì, questo dovrà essere aggiornato. Nel frattempo, puoi disabilitarlo impostando la variabile d’ambiente NO_EMBER_CLI su 1.

5 Mi Piace

Probabilmente è ovvio, ma potresti chiarire dove imposti la variabile d’ambiente @eviltrout?

Ho provato nel file d/unicorn in questo modo:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "$CMD" -e NO_EMBER_CLI=1

…ma non ha funzionato (ricevo ancora il messaggio “Ember CLI è necessario in modalità sviluppo” su localhost:9292).

d/boot_dev -e NO_EMBER_CLI=1

Ci ho provato oggi e ho riscontrato anch’io problemi. L’errore che ho visto era dovuto al fatto che l’emulazione dell’architettura di Docker non supporta inotify (che utilizziamo molto nello sviluppo di Discourse). Per ora, ho aggiunto un avviso a d/boot_dev quando viene rilevata un’architettura non x86_64:

❯ d/boot_dev 
WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.

Ho ora aggiunto un helper d/ember-cli e inoltrato la porta 4200 per impostazione predefinita. Le informazioni in cima a questo argomento sono state aggiornate. Una volta aggiornato, esegui d/rails s in un terminale e d/ember-cli in un altro. Ho anche impostato NO_EMBER_CLI come una delle variabili passate a Docker, quindi è disponibile se necessario.

6 Mi Piace

@david probabilmente irrilevante, ma solo per farti sapere: lo script boot_dev stampa un falso errore relativo al controllo x86_64 quando l’ho eseguito accidentalmente senza Docker su… (ma la parte ‘Il demone Docker è in esecuzione?’ è corretta)…

WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
  ...(snip)...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
1 Mi Piace

Grazie per questa immagine e per le istruzioni super chiare!

Ho ricevuto psql: error: FATAL: Peer authentication failed for user "postgres" eseguendo d/boot_dev --init.

Anche se il file pg_hba.conf in data/postgres/ aveva tutti i metodi di autenticazione impostati su “trust”, ce n’era un altro in /etc/postgresql/13/main/ con le impostazioni predefinite (“peer” / “md5”).

Ho modificato /etc/postgresql/13/main/pg_hba.conf, cambiando tutti i metodi in trust, eseguito d/shell e poi sv restart postgres per applicare le modifiche – così ho potuto continuare eseguendo manualmente d/bundle install; d/rake db:migrate RAILS_ENV=development; d/rake admin:create.

Lascio qui questo messaggio nel caso possa essere utile a qualcun altro!

1 Mi Piace