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.

13 лайков

Я обнаружил проблему: при запуске создаются следующие категории:
General, Staff, Staff67d17c71d8026b365c4c6657a9a9b5eb и General (за которым следует случайная строка и цифры).
Можно ли запретить создание категорий со случайными строками и цифрами? Я мог бы удалить клон General, но не клон Staff, так как в нём находится тема FAQ (она также есть в обычной категории Staff, так что смысла в этом нет).

Редактирование: Также создаётся категория Site Feedbackee4d95d3ac0267109c01ed5438943e6c, хотя уже существует #site-feedback. У Uncategorized также есть клон.

1 лайк

Это напоминает мне Random string in category name

2 лайка

При резервном копировании базы данных я получаю эту ошибку:

[2024-12-12 10:31:26] [ЗАПУЩЕНО]
[2024-12-12 10:31:26] 'system' запустил резервное копирование!
[2024-12-12 10:31:26] Помечаем резервную копию как выполняющуюся...
[2024-12-12 10:31:26] Проверяем существование '/workspace/discourse/tmp/backups/default/2024-12-12-103126'...
[2024-12-12 10:31:26] Проверяем существование '/workspace/discourse/public/backups/default'...
[2024-12-12 10:31:26] Обновляем метаданные...
[2024-12-12 10:31:27] Создаём дамп публичной схемы базы данных...
[2024-12-12 10:31:28] pg_dump: ошибка: подключение к базе данных "discourse_development" не удалось: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  аутентификация по peer для пользователя "postgres" не удалась
[2024-12-12 10:31:28] ИСКЛЮЧЕНИЕ: pg_dump не удался
[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] Очищаем временные файлы...
[2024-12-12 10:31:28] Удаляем остатки '.tar'...
[2024-12-12 10:31:28] Помечаем резервную копию как завершённую...
[2024-12-12 10:31:28] Уведомляем 'system' о завершении резервного копирования...

Это происходит каждый раз, когда я запускаю форум с помощью bin/ember-cli-u.

При нажатии на Резервное копирование в панели администратора я получаю:

[2024-12-12 10:34:57] [ЗАПУЩЕНО]
[2024-12-12 10:34:57] 'NateDhaliwal' запустил резервное копирование!
[2024-12-12 10:34:57] Помечаем резервную копию как выполняющуюся...
[2024-12-12 10:34:57] Проверяем существование '/workspace/discourse/tmp/backups/default/2024-12-12-103457'...
[2024-12-12 10:34:57] Проверяем существование '/workspace/discourse/public/backups/default'...
[2024-12-12 10:34:57] Обновляем метаданные...
[2024-12-12 10:34:57] Создаём дамп публичной схемы базы данных...
[2024-12-12 10:34:57] pg_dump: ошибка: подключение к базе данных "discourse_development" не удалось: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL:  аутентификация по peer для пользователя "postgres" не удалась
[2024-12-12 10:34:57] ИСКЛЮЧЕНИЕ: pg_dump не удался
[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] Очищаем временные файлы...
[2024-12-12 10:34:57] Удаляем остатки '.tar'...
[2024-12-12 10:34:57] Помечаем резервную копию как завершённую...
[2024-12-12 10:34:57] Уведомляем 'NateDhaliwal' о завершении резервного копирования...

Когда я пытаюсь изменить это с main на devcontainer, как показано на изображении, ничего не происходит — система пишет «no resultys».

Если вы говорите о ветке «devcontainer», показанной в нижнем колонтитуле второго изображения, то её следует игнорировать. Скриншоты были сделаны до того, как конфигурация devcontainer стала доступна в ветке main.

Спасибо, Давид

Однако перед этим вам нужно создать учётную запись администратора в коде. Не мог бы кто-нибудь прислать мне скриншоты, показывающие, как это сделать? У меня наконец-то появилась возможность запустить свой собственный Discourse, но я не смогу этого сделать, не зная, как его настроить. Пожалуйста, пришлите изображения, чтобы я мог увидеть, как это делается.

Вы можете использовать шаги, описанные в других инструкциях по установке без Docker, например, по адресу Install Discourse on Ubuntu or Debian for Development

Команда для создания учётной записи администратора — bin/rails admin:create, после чего следуйте инструкциям на экране.

3 лайка

Сработало, большое спасибо! Теперь у меня есть собственный форум.

@david есть какие-нибудь идеи по этому поводу? У меня всё ещё эта ошибка.

Работает ли эта система с плагинами Discourse? Может ли она?

Да, я пробовал, и плагины работают с этим.
Установить его можно по ссылке:

Я установил голосование за посты, голосование за темы и геймификацию, и пока они работают.

3 лайка

Да, мы просто запускаем наш стандартный Docker-контейнер в облаке, поэтому вы можете перейти (cd) в директорию плагинов и клонировать любой из них.

Возможно, в будущем мы добавим возможность указывать конфигурацию в отдельных репозиториях плагинов, чтобы окружение Codespaces можно было запускать напрямую из этих репозиториев.

6 лайков

Не уверен, связано ли это с Codespaces или просто с окружением Linux, но при входе и выходе в режиме эмуляции и переключении между пользователями команда bin/ember-cli -u просто завершает работу, без логов, указывающих на какие-либо ошибки, которые могли бы её вызвать. При этом codespace актуален относительно репозитория Discourse.

Мне пришлось включить experimental_impersonation, чтобы не пришлось выходить из системы во второй среде разработки (также на GH Codespaces).