Instalar Discourse para desarrollo usando Docker

Hola,

Estoy recibiendo este error al intentar ejecutar d/boot_dev --init

Errno::EACCES: Permiso denegado @ 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>'
(Véase el rastreo completo ejecutando la tarea con --trace)

¿Alguna idea sobre cómo solucionarlo? He buscado por todas partes pero no encontré ninguna solución.

Edición: lo solucioné ejecutando chmod -R 777 ~/discourse, pero ahora estoy recibiendo este error:

gifsicle worker: no se encontró gifsicle; proporcione el binario adecuado o deshabilite este worker (argumento --no-gifsicle o :gifsicle => false a través de las opciones)

2 Me gusta

Eso no es un problema; recientemente eliminamos su uso, por lo que la advertencia no es motivo de preocupación. ¿Estás trabajando con código antiguo de Discourse?

4 Me gusta

No, fue el lanzamiento reciente. Pero seguí este tutorial de DigitalOcean y ahora funciona perfectamente.

2 Me gusta

¿Cómo se usan los plugins en este tipo de configuración?
Estoy intentando seguir Install plugins on a self-hosted site, pero menciona el archivo /var/discourse/containers/app.yml, que no existe en mi directorio discourse.

He logrado configurar un entorno de desarrollo de Discourse y puedo probar mi parche, pero ¿cómo puedo aplicar mi parche en mi instancia de producción? Intenté construir base y luego ejecutar ./launcher rebuild app --run-image discourse/base:build, pero parece que no resulta en una instancia de Discourse en ejecución.

Por lo general, obtengo un error relacionado con la ausencia del grupo syslog, pero comenté esa parte y aún así no terminé con un sitio en funcionamiento. Además, no hay nada relevante en los registros de Docker.

No documentamos realmente este tipo de cosas, pero generarías un archivo “diff” y luego aplicarías el diff en un hook después de clonar el repositorio. app.yml soporta hooks.

Una solución rápida y sucia para cosas autohospedadas de un solo contenedor es simplemente editar el código in situ y ejecutar sv restart unicorn.

2 Me gusta

No estoy seguro de si este es el mejor lugar para preguntar sobre este problema, pero no he podido completar la instalación de Discourse usando Docker en una computadora Apple M1.

Después de ejecutar d/boot_dev --init, todas las dependencias se instalan sin ningún problema aparente, pero una vez que llego al paso de Migrating database, se queda allí consumiendo el 100 % de uno de mis núcleos y no parece avanzar desde ese punto.

Intenté iniciar sesión en el contenedor de Docker y la tarea bundle migrate se ejecuta al 100 %, pero no hay actividad aparente en el proceso de PostgreSQL.

¡Cualquier idea sería muy útil!

1 me gusta

Creo que el soporte de virtualización es realmente muy nuevo, no me sorprende que sea un poco una aventura.

@pmusaraj / @david ¿han tenido suerte haciendo que docker-dev funcione en M1?

5 Me gusta

Todavía no lo he probado.

2 Me gusta

Si alguien puede ejecutar Discourse con Docker en un Mac M1, por favor házmelo saber. Mientras tanto, ¡probaré seguir la otra guía! ¡Gracias!

1 me gusta

Lo intenté brevemente hoy y me quedé atascado en el mismo paso que tú, pero con un error:

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í, por favor hazlo. Varios miembros del equipo usan Discourse en M1 (yo incluido) todos los días, ¡así que funciona bastante bien!

Avísanos si encuentras algún problema.

2 Me gusta

¡Muchas gracias por tu tiempo y ayuda! Al menos no soy el único que se ha quedado atascado con esto.

Hola, creo que deberíamos crear una descripción sobre Ember-CLI aquí, y un atajo para el comando de abajo sin necesidad de entrar en el contenedor Docker.

Y no logro que funcione ejecutando los comandos anteriores dentro del contenedor; parece que el contenedor no expone el puerto 4200.
Screenshot from 2021-05-02 15-48-51

Exponiendo manualmente el puerto 4200 editando d/boot_dev:

Después de reiniciar el contenedor, accedo a localhost:4200 y obtengo esto:

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)

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

Después de editar bin/ember-cli y cambiar el PORT de 3000 a 9292, todo funciona.
Screenshot from 2021-05-02 17-55-24

Parece que el bash de ember-cli no puede funcionar con ENV["UNICORN_PORT"].

1 me gusta

Ember CLI es un nuevo desarrollo (y muy disputado); @eviltrout debería poder comentar sobre eso pronto.

3 Me gusta

Sí, esto tendrá que actualizarse. Mientras tanto, puedes desactivarlo estableciendo la variable de entorno NO_EMBER_CLI en 1.

5 Me gusta

Probablemente sea obvio, pero ¿podrías aclarar dónde estableces la variable de entorno @eviltrout?

Lo intenté en el archivo d/unicorn de esta manera:

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

…pero no funcionó (sigo recibiendo el mensaje “Ember CLI es obligatorio en modo de desarrollo” en localhost:9292).

d/boot_dev -e NO_EMBER_CLI=1

Lo intenté hoy y también encontré problemas. El error que vi se debía a que la emulación de arquitectura de Docker no soporta inotify (algo que usamos mucho en el desarrollo de Discourse). Por ahora, he añadido una advertencia a d/boot_dev cuando se detecta una arquitectura que no es x86_64:

❯ d/boot_dev 
ADVERTENCIA: La arquitectura de Docker no es x86_64.
Es poco probable que el desarrollo de Discourse funcione usando la emulación de arquitectura de Docker.
Por favor, intenta una instalación de desarrollo nativa.

Ahora he añadido un helper d/ember-cli y he reenviado el puerto 4200 de forma predeterminada. La información en la parte superior de este tema también se ha actualizado. Una vez que hayas actualizado, ejecuta d/rails s en una terminal y d/ember-cli en otra. También he establecido NO_EMBER_CLI como una de las variables que se pasan a Docker, por lo que estará disponible si es necesario.

6 Me gusta

@david probablemente sea algo sin importancia, pero solo para que lo sepas: el script boot_dev muestra un falso error en la verificación de x86_64 cuando lo ejecuté accidentalmente sin Docker en… (pero la parte de “¿Está ejecutándose el daemon de Docker?” es correcta)…

ADVERTENCIA: La arquitectura de Docker no es x86_64.
Es poco probable que el desarrollo de Discourse funcione usando la emulación de arquitectura de Docker.
Intenta una instalación de desarrollo nativa.
  ...(omisión)...\
No se puede conectar con el daemon de Docker en unix:///var/run/docker.sock. ¿Está ejecutándose el daemon de Docker?
1 me gusta

¡Gracias por esta imagen y por las instrucciones superclaras!

Al ejecutar d/boot_dev --init, obtuve el error psql: error: FATAL: Peer authentication failed for user "postgres".

Aunque el archivo pg_hba.conf en data/postgres/ tenía todos los métodos de autenticación configurados como “trust”, había otro en /etc/postgresql/13/main/ que conservaba los valores predeterminados (“peer” / “md5”).

Edité /etc/postgresql/13/main/pg_hba.conf, cambié todos los métodos a trust, ejecuté d/shell y luego sv restart postgres para aplicar los cambios. Así pude continuar ejecutando manualmente d/bundle install; d/rake db:migrate RAILS_ENV=development; d/rake admin:create.

Lo dejo aquí por si le sirve a alguien más.

1 me gusta