Developing Discourse on GitHub Codespaces

GitHub Codespaces is a very fast way to get started with Discourse development. Their free tier is good for 30 hours per month of a 4-core machine.

Getting Started

  1. Navigate to the github repository

  2. Press the , (comma) key on your keyboard, to open GitHub codespaces

  3. Use ‘change options’ to customize the machine. Technically, the 2-core machine will work, but we recommend using at least 4-core for a better experience.

  4. Click “Create Codespace”

  5. Wait for the container to download and start. When it’s done, the README will appear, and you’ll see the Discourse filesystem in the sidebar.

  6. Run the default build task using Ctrl + Shift + B (Cmd + Shift + B on mac).

    This will install dependencies, migrate the database, and start the server. It’ll take a few minutes, especially on the lower-end machines. You’ll see “Build successful” in the terminal when it’s done.

  7. Visit the “Ports” tab, and click the :globe_with_meridians: button for port 4200. This will open a new tab showing your development copy of Discourse

  8. All done! You can now make changes in the codespace and see them reflected in the preview.

The VSCode environment will automatically be configured with our recommended settings and extensions, including automatic linting and formatting.

To minimize usage, make sure to run “Codespaces: Stop Current Codespace” from the command palette (Ctrl + Shift + P or Cmd + Shift + P) when you’re finished. If you forget to do this, the Codespace should be shut down automatically after your account’s configured idle time (default 30 mins). But, there are some situations where the codespace will not be detected as idle, so it’s best to stop it deliberately.

Tips

  • You can launch a codespace from specific branches/PRs - just visit it, and press ,

  • You can manage all your codespaces at Sign in to GitHub · GitHub

  • Discourse’s sample vscode .vscode/settings.json and .vscode/tasks.json will be copied when you first boot the codespace. From that point forward, if you want to use the latest sample config, you’ll need to manually copy .vscode/settings.json.sample to .vscode/settings.json.


This document is version controlled - suggest changes on github.

12 Me gusta

Encontré un problema: crea las siguientes categorías al iniciarse:
General, Staff, Staff67d17c71d8026b365c4c6657a9a9b5eb y General (seguido de una cadena aleatoria y números).
¿No se pueden crear esas con la cadena aleatoria y números? Podría eliminar el clon de General, pero no el clon de Staff, ya que tiene el tema de Preguntas Frecuentes (esto también está en la categoría normal de Staff, así que no tiene sentido).

Editar: Site Feedbackee4d95d3ac0267109c01ed5438943e6c también se crea, aunque ya existe un Site feedback. Uncategorized también tiene un clon.

1 me gusta

Esto me recuerda a Random string in category name

2 Me gusta

Al hacer una copia de seguridad de la base de datos, obtengo este error:

[2024-12-12 10:31:26] [INICIADO]
[2024-12-12 10:31:26] ¡'system' ha iniciado la copia de seguridad!
[2024-12-12 10:31:26] Marcando la copia de seguridad como en ejecución...
[2024-12-12 10:31:26] Asegurándose de que '/workspace/discourse/tmp/backups/default/2024-12-12-103126' existe...
[2024-12-12 10:31:26] Asegurándose de que '/workspace/discourse/public/backups/default' existe...
[2024-12-12 10:31:26] Actualizando metadatos...
[2024-12-12 10:31:27] Volcando el esquema público de la base de datos...
[2024-12-12 10:31:28] pg_dump: error: la conexión a la base de datos "discourse_development" falló: la conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" falló: FATAL:  Peer authentication failed for user "postgres"
[2024-12-12 10:31:28] EXCEPTION: pg_dump falló
[2024-12-12 10:31:28] /workspace/discourse/lib/backup_restore/backuper.rb:173:in `dump_public_schema'
/workspace/discourse/lib/backup_restore/backuper.rb:36:in `run'
/workspace/discourse/lib/backup_restore.rb:13:in `backup!'
/workspace/discourse/app/jobs/regular/create_backup.rb:10:in `execute'
/workspace/discourse/app/jobs/base.rb:322:in `block (2 levels) in perform'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/workspace/discourse/app/jobs/base.rb:309:in `block in perform'
/workspace/discourse/app/jobs/base.rb:305:in `each'
/workspace/discourse/app/jobs/base.rb:305:in `perform'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/workspace/discourse/lib/sidekiq/pausable.rb:132:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'
[2024-12-12 10:31:28] Limpiando...
[2024-12-12 10:31:28] Eliminando restos de '.tar'...
[2024-12-12 10:31:28] Marcando la copia de seguridad como finalizada...
[2024-12-12 10:31:28] Notificando a 'system' el fin de la copia de seguridad...

Esto sucede cada vez que inicio el foro con bin/ember-cli-u.

Al hacer clic en Backup en el panel de administración, obtengo:

[2024-12-12 10:34:57] [INICIADO]
[2024-12-12 10:34:57] ¡'NateDhaliwal' ha iniciado la copia de seguridad!
[2024-12-12 10:34:57] Marcando la copia de seguridad como en ejecución...
[2024-12-12 10:34:57] Asegurándose de que '/workspace/discourse/tmp/backups/default/2024-12-12-103457' existe...
[2024-12-12 10:34:57] Asegurándose de que '/workspace/discourse/public/backups/default' existe...
[2024-12-12 10:34:57] Actualizando metadatos...
[2024-12-12 10:34:57] Volcando el esquema público de la base de datos...
[2024-12-12 10:34:57] pg_dump: error: la conexión a la base de datos "discourse_development" falló: la conexión al servidor en el socket "/var/run/postgresql/.s.PGSQL.5432" falló: FATAL:  Peer authentication failed for user "postgres"
[2024-12-12 10:34:57] EXCEPTION: pg_dump falló
[2024-12-12 10:34:57] /workspace/discourse/lib/backup_restore/backuper.rb:173:in `dump_public_schema'
/workspace/discourse/lib/backup_restore/backuper.rb:36:in `run'
/workspace/discourse/script/spawn_backup_restore.rb:9:in `backup'
/workspace/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/workspace/discourse/script/spawn_backup_restore.rb:4:in `fork'
/workspace/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2024-12-12 10:34:57] Limpiando...
[2024-12-12 10:34:57] Eliminando restos de '.tar'...
[2024-12-12 10:34:57] Marcando la copia de seguridad como finalizada...
[2024-12-12 10:34:57] Notificando a 'NateDhaliwal' el fin de la copia de seguridad...

cuando intento cambiarlo de main a devcontainer como muestra la imagen, no obtengo nada, dice sin resultados.

Si te refieres a la rama ‘devcontainer’ que se muestra en el pie de página de la segunda imagen, entonces deberías ignorarla. Las capturas de pantalla se tomaron antes de que la configuración de devcontainer estuviera disponible en la rama main.

gracias david

antes de presionarlo, necesitas crear una cuenta de administrador en el código. ¿Alguien puede enviarme algunas imágenes que muestren cómo hacerlo porque finalmente tengo una forma de acceder a mi propio Discourse pero no puedo hacerlo sin saber cómo configurarlo, así que alguien puede darme imágenes para que pueda ver cómo hacerlo?

Puede usar los pasos descritos en otras instalaciones no basadas en Docker, como Install Discourse on Ubuntu or Debian for Development

El comando para crear una cuenta de administrador es bin/rails admin:create y luego sigue las indicaciones

3 Me gusta

Funcionó, muchas gracias, ahora tengo mi propio foro.

@david ¿alguna idea para esto? Todavía me sale este error.

¿Este sistema funciona con plugins de Discourse? ¿Puede hacerlo?

Sí, lo he intentado y los plugins funcionan con esto.
Se puede instalar en:

He instalado la votación de publicaciones, la votación de temas y la gamificación, y hasta ahora funcionan.

3 Me gusta

Sí, simplemente estamos ejecutando nuestro contenedor Docker estándar en la nube, así que puedes cd al directorio de plugins y clonar lo que quieras.

Algún día sería bueno si pudiéramos tener una configuración en los repositorios individuales de plugins, para que el entorno de codespaces pueda lanzarse directamente desde sus repos.

6 Me gusta

No estoy seguro si esto está relacionado con Codespaces o simplemente con un entorno Linux, pero cuando inicio y cierro sesión al suplantar y cambiar entre usuarios, bin/ember-cli -u simplemente termina, sin registros que apunten a ningún error que pueda haberlo causado. Y el codespace está actualizado con el repositorio de Discourse.