Configurar Discourse para desarrollo en Fedora Linux

Este tutorial ha sido probado con una instalación nueva de Fedora 31 y 33, pero puede funcionar en versiones anteriores que también utilicen dnf como herramienta de gestión de paquetes. Esta no es una guía oficial, pero puede ser útil para otros desarrolladores que utilicen Fedora. Se basa en gran medida en la guía de desarrollo de Ubuntu, con cambios para los diferentes paquetes de dnf. Se asume que no tienes ninguno de los paquetes instalados todavía, aunque la mayoría serán omitidos por las herramientas si ya están instalados.

Si estás buscando instalar Discourse para un entorno de producción, prefiere las instrucciones de instalación de Docker en github.

Instalar los paquetes necesarios del sistema y de desarrollo

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

Instalar los paquetes npm requeridos

sudo npm install -g svgo pnpm

Instalar y configurar 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

Instalar y configurar redis

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

Instalación de rbenv, ruby-build y 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
# confirmar que la instalación es correcta
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

Instalar dependencias de Ruby

gem update --system
gem install bundler mailcatcher rails

Clonar el código de Discourse

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

Instalar dependencias de Discourse

bundle install
pnpm install

Crear las bases de datos requeridas y cargar el esquema

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

Probar la instalación ejecutando las pruebas

bundle exec rake autospec

Ejecutar la aplicación

bundle exec rails server

Ahora deberías poder ver la página de configuración de Discourse en http://localhost:3000.

Para una configuración adicional, consulta las guías de instalación oficiales existentes.


Este documento está controlado por versiones: sugiere cambios en github.

27 Me gusta

En Instalación de rbenv, ruby-build y ruby, la URL del script rbenv-doctor ya no funciona (aparentemente la rama ha sido renombrada de master a main), el comando correcto ahora es:

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash
2 Me gusta

Gracias por la información @nicolas-jaussaud, he actualizado el OP.

Para tu información, ahora prefiero usar chruby y ruby-install en lugar de rbenv.

2 Me gusta

Me encontré con un problema al intentar ejecutar bundle install, ya que Fedora ahora tiene deshabilitado el transporte de archivos por defecto.

El error ocurre al intentar instalar la gema sprockets y termina con el mensaje:

transport 'file' not allowed

No sé cuál es la forma correcta de hacer esto, pero puedes permitir temporalmente el transporte inseguro:

git config --global protocol.file.allow always
# ejecuta la configuración de discourse aquí
git config --global protocol.file.allow never

Después de eso, me encontré con un error como este al ejecutar 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'

Parece que ocurrió después de que la migración terminara, así que como no pude averiguar cómo solucionarlo, lo ignoré, pero afortunadamente mi sitio de desarrollo parece estar funcionando.

Para el entorno de prueba, no obtuve el mismo error, pero sí un error sobre la falta de oxipng, que no parece estar disponible como paquete de Fedora.

Después de eso, no tuve más problemas, todo siguió funcionando más o menos bien en Fedora 38. Sin embargo, previamente había instalado rbenv usando algunas otras instrucciones de configuración.

Al ejecutar bundle exec rake autospec, obtuve algunas fallas en las pruebas (135), pero parece que tengo una configuración de desarrollo mayormente funcional.

2 Me gusta

Pude poner en marcha la versión de desarrollo hace algún tiempo, pero la versión de producción me resultó demasiado difícil. .

Acabo de seguir esta guía para instalar en Fedora 40 Workstation, tuve que añadir oxipng a las instalaciones de la distribución.
sudo dnf install oxipng

3 Me gusta

Gracias por informarnos, he actualizado la documentación en este commit: docs/fedora-setup: include oxipng package (#14) · discourse/discourse-developer-docs@eb51e54 · GitHub.

1 me gusta

Me he quedado atascado después de la instalación hoy en Fedora 41 con el siguiente problema cuando me conecto a localhost:3000 y hago clic en registrar:
“no se definieron correos electrónicos de administrador durante la configuración”; el mensaje proporciona cómo agregar un correo electrónico de administrador.

No he logrado agregar una cuenta de administrador con éxito siguiendo este procedimiento debido a 2 errores al usar ./launcher enter app:
1° El primer error resuelto fue: no hay archivo app.yml presente → Copié sampleapp.yml de la carpeta sample a la carpeta del contenedor, luego la modifiqué para agregar direcciones de correo electrónico, luego reconstruí con /var/discourse/launcher rebuild app
2° El segundo error no está resuelto:
Respuesta de error del demonio: No existe tal contenedor: app
Si uso los comandos rake para crear un administrador, me dice que no se encontró ningún rakefile

¿Alguien puede ayudarme, por favor?

Esta instalación no usa docker, por lo que no puedes entrar en un contenedor.

Intenta crear un administrador desde la carpeta de Discourse con este comando:

bin/rails admin:create
1 me gusta

Hola Coconut, eres rápido en responder y eficiente, ¡muchas gracias!
El comando devuelve gem bundler missing, que instalé con gem install bundler -v 2.6.2 y luego pude aplicar tu solución con éxito.

2 Me gusta

Acabo de intentar ejecutar una instalación local y encontré problemas con pgvector. Esto es en Fedora 42 y Postgres16. La versión empaquetada de pgvector es 0.6.2 y parece que necesito compilar desde la fuente para obtener una más reciente.

Luego encontré conflictos al intentar compilar pgvector, que parece requerir el paquete postgresql-private-devel que tenía solicitudes conflictivas con libpq-devel.

Lo resolví:

  •  sudo dnf install postgresql-server-devel --allowerasing
    
  • Compilar pgvector
  • Comprobar la versión instalada
    sudo -u postgres psql discourse_development -c "SELECT * FROM pg_available_extensions WHERE name = 'vector';"
    
  •  sudo systemctl restart postgresql
    
2 Me gusta