Настройка Discourse для разработки на Fedora Linux

Это руководство было протестировано на чистой установке Fedora 31 и 33, но может работать и на более старых версиях, которые также используют dnf в качестве инструмента управления пакетами. Это не официальное руководство, но оно может быть полезно для других разработчиков, использующих Fedora. В значительной степени оно основано на руководстве по разработке для Ubuntu, с изменениями для различных пакетов в dnf. Предполагается, что у вас еще не установлены какие-либо из пакетов, хотя большинство из них будут пропущены инструментами, если они уже установлены.

Если вы хотите установить Discourse для продуктивной среды, используйте инструкции по установке docker на github.

Установка необходимых системных и разработческих пакетов

sudo dnf update
sudo dnf install -y "@development-tools" git rpm-build zlib-devel ruby-devel readline-devel libpq-devel ImageMagick sqlite sqlite-devel nodejs npm curl gcc g++ bzip2 openssl-devel libyaml-devel libffi-devel zlib-devel gdbm-devel ncurses-devel optipng pngquant jhead jpegoptim gifsicle oxipng

Установка необходимых пакетов npm

sudo npm install -g svgo pnpm

Установка и настройка postgres

sudo dnf install postgresql-server postgresql-contrib
sudo postgresql-setup --initdb --unit postgresql
sudo systemctl enable postgresql
sudo systemctl start postgresql
sudo -u postgres -i createuser -s $USER

Установка и настройка redis

sudo dnf install redis
sudo systemctl enable redis
sudo systemctl start redis

Установка rbenv, ruby-build и ruby

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
~/.rbenv/bin/rbenv init
printf 'export PATH="$HOME/.rbenv/bin:$PATH"\n' >> ~/.bashrc
printf 'eval "$(rbenv init - --no-rehash)"\n' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
# подтвердите правильность установки
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
rbenv install 2.7.1
rbenv global 2.7.1
rbenv rehash

Установка зависимостей Ruby

gem update --system
gem install bundler mailcatcher rails

Клонирование кода Discourse

git clone https://github.com/discourse/discourse.git ~/discourse
cd ~/discourse

Установка зависимостей Discourse

bundle install
pnpm install

Создание необходимых баз данных и загрузка схемы

bundle exec rake db:create db:migrate
RAILS_ENV=test bundle exec rake db:create db:migrate

Проверка установки путем запуска тестов

bundle exec rake autospec

Запуск приложения

bundle exec rails server

Теперь вы должны иметь возможность увидеть страницу настройки Discourse по адресу http://localhost:3000.

Для дальнейшей настройки см. существующие официальные руководства по установке.


Этот документ находится под контролем версий - предложите изменения на github.

27 лайков

В разделе Установка rbenv, ruby-build и ruby ссылка на скрипт rbenv-doctor больше не работает (похоже, ветка была переименована из master в main). Теперь правильная команда выглядит так:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
2 лайка

Спасибо за информацию @nicolas-jaussaud, я обновил первый пост.

Кстати, я теперь предпочитаю использовать chruby и ruby-install вместо rbenv.

2 лайка

Я столкнулся с проблемой при запуске bundle install, так как в Fedora по умолчанию отключён транспорт файлов.

Ошибка возникает при попытке установить gem sprockets и завершается сообщением:

transport 'file' not allowed

Я не знаю, какой является правильным подходом, но можно временно разрешить небезопасный транспорт:

git config --global protocol.file.allow always
# здесь запустите установку Discourse
git config --global protocol.file.allow never

После этого при выполнении db:migrate я получил следующую ошибку:

At /home/hhyyrylainen/Projects/discourse/lib/site_setting_extension.rb:199:in `public_send`
Deprecation notice: `SiteSetting.enable_personal_messages` has been deprecated. Please use `SiteSetting.personal_message_enabled_groups` instead. (removal in Discourse 3.0) 
At /home/hhyyrylainen/Projects/discourse/lib/site_setting_extension.rb:199:in `public_send`
#<Thread:0x00007f94c3342600 /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:83 run> terminated with exception (report_on_exception is true):
/home/hhyyrylainen/.gem/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_handling.rb:309:in `connection_pool': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)
	from /home/hhyyrylainen/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management/rails_61_compat.rb:8:in `current'
	from /home/hhyyrylainen/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:115:in `current_db_hostnames'
	from /home/hhyyrylainen/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:111:in `current_hostname'
	from /home/hhyyrylainen/Projects/discourse/lib/discourse.rb:232:in `handle_job_exception'
	from /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:114:in `rescue in do_work'
	from /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:113:in `do_work'
	from /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:85:in `block (2 levels) in start_thread'
/home/hhyyrylainen/.gem/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_handling.rb:309:in `connection_pool': ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished)
	from /home/hhyyrylainen/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:79:in `with_connection'
	from /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:96:in `do_work'
	from /home/hhyyrylainen/Projects/discourse/lib/scheduler/defer.rb:85:in `block (2 levels) in start_thread'

Кажется, это произошло после завершения миграции. Так как я не смог понять, как исправить эту проблему, я просто проигнорировал её, но, к счастью, мой сайт для разработки, похоже, работает.

Для тестовой среды я не получил той же ошибки, но столкнулся с ошибкой, связанной с отсутствием oxipng, которого, похоже, нет в пакетах Fedora.

После этого я больше не сталкивался с проблемами: всё ещё более или менее работало нормально на Fedora 38. Хотя ранее я установил rbenv, следуя другим инструкциям по настройке.

При запуске bundle exec rake autospec я получил несколько неудачных тестов (135), но, похоже, у меня получилась в целом рабочая среда для разработки.

2 лайка

Я запустил версию для разработчиков некоторое время назад, но версия для продакшена оказалась для меня слишком сложной.

Только что следовал этой инструкции для установки на Fedora 40 Workstation, пришлось добавить oxipng в пакетные установки дистрибутива.
sudo dnf install oxipng

3 лайка

Спасибо, что сообщили нам об этом. Я обновил документацию в этом коммите: docs/fedora-setup: include oxipng package (#14) · discourse/discourse-developer-docs@eb51e54 · GitHub.

1 лайк

Сегодня после установки на Fedora 41 я застрял на следующей проблеме: при подключении к localhost:3000 и нажатии на «Зарегистрироваться» появляется сообщение: «Во время настройки не были определены адреса электронной почты администратора»; в сообщении указано, как добавить адрес электронной почты администратора.

Мне не удалось успешно добавить учётную запись администратора, следуя этой процедуре, из-за двух ошибок при использовании команды ./launcher enter app:

  1. Первая ошибка была решена: файл app.yml отсутствует — я скопировал sampleapp.yml из папки sample в папку контейнера, затем отредактировал его, добавив адреса электронной почты, и выполнил пересборку командой /var/discourse/launcher rebuild app.
  2. Вторая ошибка не решена:
    Ошибка ответа от демона: контейнер app не найден.
    Если я использую команды rake для создания администратора, система сообщает, что файл rakefile не найден.

Может ли кто-нибудь, пожалуйста, помочь?

Эта установка не использует Docker, поэтому вы не можете войти в контейнер.

Попробуйте создать администратора из папки Discourse с помощью следующей команды:

bin/rails admin:create
1 лайк

Привет, Coconut! Вы отвечаете быстро и эффективно, большое спасибо!
Команда выдавала ошибку gem bundler missing, но я установил его с помощью gem install bundler -v 2.6.2, и после этого смог успешно применить ваше решение!

2 лайка

Только что попробовал выполнить локальную установку и столкнулся с проблемами в pgvector. Это на Fedora 42 и Postgres 16. Упакованная версия pgvector — 0.6.2, и, похоже, мне нужно скомпилировать её из исходного кода, чтобы получить более новую версию.

Затем возникли конфликты при сборке pgvector, которая, как выяснилось, требует пакет postgresql-private-devel, у которого были конфликтующие запросы с libpq-devel.

Проблему решил следующим образом:

  •  sudo dnf install postgresql-server-devel --allowerasing
    
  • Собрать pgvector
  • Проверить установленную версию
    sudo -u postgres psql discourse_development -c "SELECT * FROM pg_available_extensions WHERE name = 'vector';"
    
  •  sudo systemctl restart postgresql
    
3 лайка

image

Так… это официально? (Эту строку, наверное, стоит удалить, да?)

Прошу прощения, но эта версия уже устарела? Последняя версия Ruby, отображаемая в rbenv install -l, — 4.0.5, если память мне не изменяет (как и на ruby-lang.org).

1 лайк

При запуске bundle exec rails server начинается выполнение множества миграций. Процесс идёт уже около часа и всё ещё не завершён. На моём ноутбуке достаточно оперативной памяти и мощности процессора для этой задачи. Не связано ли это просто с огромным количеством миграций, которые нужно выполнить?

EDIT: Прошло уже 3 часа, и процесс всё ещё продолжается.