Настройка 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

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

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
    
2 лайка