Discourse für Entwicklung auf Fedora Linux einrichten

This guide has been tested against a fresh install of Fedora 31 and 33, but may work on older versions that also use dnf as the package management tool. This is not an official guide but may be useful for other developers using Fedora. This is largely based on the Ubuntu development guide, with changes for the different packages for dnf. The assumption is that you do not have any of the packages installed already, although most will be skipped by the tooling if it is already installed.

If you’re looking to install Discourse for a production environment, prefer the docker install instructions on github.

Install required system and development packages

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

Install required npm packages

sudo npm install -g svgo pnpm

Install and setup 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

Install and setup redis

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

Installing rbenv, ruby-build, and 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
# confirm the install is correct
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

Install Ruby dependencies

gem update --system
gem install bundler mailcatcher rails

Clone Discourse code

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

Install Discourse dependencies

bundle install
pnpm install

Create the required databases and load the schema

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

Test installation by running the tests

bundle exec rake autospec

Run the application

bundle exec rails server

You should now be able to see the Discourse setup page at http://localhost:3000.

For further setup, see the existing official install guides.


This document is version controlled - suggest changes on github.

27 „Gefällt mir“

In rbenv, ruby-build und ruby installieren, funktioniert die URL für das rbenv-doctor-Skript nicht mehr (anscheinend wurde der Branch von master in main umbenannt), der korrekte Befehl lautet jetzt:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
2 „Gefällt mir“

Danke für die Infos @nicolas-jaussaud, ich habe den OP aktualisiert.

FWIW benutze ich jetzt lieber chruby und ruby-install anstelle von rbenv.

2 „Gefällt mir“

Ich bin auf ein Problem gestoßen, als ich versuchte, bundle install auszuführen, da Fedora jetzt standardmäßig den Dateitransport deaktiviert hat.

Der Fehler tritt bei der Installation des sprockets-Gems auf und endet mit der Meldung:

transport 'file' not allowed

Ich weiß nicht, wie der richtige Weg ist, dies zu tun, aber Sie können den unsicheren Transport vorübergehend zulassen:

git config --global protocol.file.allow always
# Führen Sie hier die Discourse-Einrichtung aus
git config --global protocol.file.allow never

Danach stieß ich auf einen Fehler wie diesen, als ich db:migrate ausführte:

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'

Es scheint, dass dies nach Abschluss der Migration geschah, also habe ich es ignoriert, da ich keine Lösung finden konnte. Glücklicherweise scheint meine Entwicklungsumgebung zu funktionieren.

Für die Testumgebung erhielt ich nicht denselben Fehler, aber einen Fehler bezüglich des fehlenden oxipng, das anscheinend nicht als Fedora-Paket verfügbar ist.

Danach stieß ich auf keine weiteren Probleme, alles funktionierte auf Fedora 38 mehr oder weniger gut. Allerdings hatte ich zuvor rbenv mit anderen Einrichtungsanweisungen installiert.

Beim Ausführen von bundle exec rake autospec erhielt ich einige fehlgeschlagene Tests (135), aber es scheint, dass ich eine weitgehend funktionierende Entwicklungsumgebung habe.

2 „Gefällt mir“

Ich habe die Entwicklerversion vor einiger Zeit zum Laufen gebracht, aber die Produktionsversion war mir zu schwierig. .

Ich habe dieser Anleitung zur Installation auf Fedora 40 Workstation gefolgt und musste oxipng zu den Distro-Installationen hinzufügen.
sudo dnf install oxipng

3 „Gefällt mir“

Danke für die Information, ich habe die Dokumentation in diesem Commit aktualisiert: docs/fedora-setup: include oxipng package (#14) · discourse/discourse-developer-docs@eb51e54 · GitHub.

1 „Gefällt mir“

Ich stecke heute nach der Installation auf Fedora 41 mit folgendem Problem fest, wenn ich mich mit localhost:3000 verbinde und auf Registrieren klicke:
„Bei der Einrichtung wurden keine Administrator-E-Mails definiert“; die Nachricht erklärt, wie eine Administrator-E-Mail hinzugefügt wird.

Ich konnte kein Admin-Konto erfolgreich hinzufügen, indem ich dieser Vorgehensweise gefolgt bin, da es 2 Fehler gab, als ich ./launcher enter app verwendete:
1° Der erste gelöste Fehler war: Es ist keine app.yml-Datei vorhanden – Ich habe die sampleapp.yml aus dem Beispielordner in den Containerordner kopiert, dann geändert, um E-Mail-Adressen hinzuzufügen, und dann mit /var/discourse/launcher rebuild app neu erstellt.
2° Der zweite Fehler ist nicht gelöst:
Fehlerantwort vom Daemon: Kein solcher Container: app
Wenn ich die Rake-Befehle verwende, um einen Admin zu erstellen, wird mir mitgeteilt, dass keine Rakefile gefunden wurde.

Kann mir bitte jemand helfen?

Diese Installation verwendet kein Docker, daher können Sie keinen Container betreten.

Versuchen Sie, einen Administrator aus dem Discourse-Ordner mit diesem Befehl zu erstellen:

bin/rails admin:create
1 „Gefällt mir“

Hallo Kokosnuss, du antwortest schnell und effizient, vielen Dank!
Der Befehl gibt zurück, dass bundler fehlt, was ich mit gem install bundler -v 2.6.2 installiert habe und dann konnte ich deine Lösung erfolgreich anwenden!

2 „Gefällt mir“

Ich habe gerade versucht, eine lokale Installation auszuführen und bin auf Probleme mit pgvector gestoßen. Dies ist auf Fedora 42 und Postgres16. Die paketierte Version von pgvector ist 0.6.2 und es scheint, dass ich aus dem Quellcode kompilieren muss, um eine neuere Version zu erhalten.

Dann gab es Konflikte beim Versuch, pgvector zu kompilieren, was das Paket postgresql-private-devel erfordert, das widersprüchliche Anforderungen mit libpq-devel hatte.

Gelöst durch:

  • sudo dnf install postgresql-server-devel --allowerasing
    
  • pgvector kompilieren
  • Installierte Version prüfen
    sudo -u postgres psql discourse_development -c "SELECT * FROM pg_available_extensions WHERE name = 'vector';"
    
  • sudo systemctl restart postgresql
    
2 „Gefällt mir“