Entendido, sí, diferentes sistemas operativos y demás. Ya hay alguien preguntando cómo lo hice, publicaré aquí por si acaso.
Se necesita Ruby 3.2.x (a través de rbenv, para no depender del sistema operativo), Node v16.19.x/npm 8.19.x y PostgreSQL (probablemente cualquier versión superior a 11).
- Creé un archivo
.ruby-version que especificaba la versión de Ruby que instalé (3.2.2).
- Ejecuté
bundle y todos los gems se compilaron sin problemas.
- Dentro de PostgreSQL, tuve que configurar la base de datos:
CREATE DATABASE discourse;
CREATE USER discourse WITH password 'fA....';
GRANT ALL PRIVILEGES ON DATABASE discourse TO discourse;
\c discourse
GRANT ALL ON SCHEMA public TO discourse;
Me sorprendió que database.yml no aceptara variables de production (esto parece muy contrario a la convención de Rails). Todas las configuraciones de la base de datos estaban en config/discourse.conf, junto con los valores SMTP. Los completé.
Luego ejecuté las migraciones de la base de datos:
bundle exec rails db:migrate
Todo funcionó bien y las migraciones fueron exitosas.
- En
config/sidekiq.yml, después de la sección development, añadí:
production:
:concurrency: 2
:queues:
- [critical, 2]
- [default, 1]
- [low]
- [ultra_low]
- Luego edité
lib/tasks/assets.rake, alrededor de la línea 151, y añadí:
harmony: true,
para que se vea así:
uglified, map =
Uglifier.new(
comments: :none,
harmony: true,
source_map: {
filename: File.basename(from),
output_filename: File.basename(to),
},
).comp
E instalé los siguientes paquetes npm:
npm install terser
npm install -g uglify-js@"<3"
Luego compilé los assets:
RAILS_ENV=production bundle exec rake assets:precompile
¡Y listo! Ahora esto debería funcionar:
bundle exec sidekiq -e production -C config/sidekiq.yml
bundle exec puma --config config/puma.rb -e production
Esto pone en marcha sidekiq y el servidor web puma.
(Mucho más barato y con más control, es decir, ya tengo Ruby 3.2.2 funcionando). La mayor parte del tiempo se dedicó a solucionar las peculiaridades (como buscar los valores de production donde no debían estar). Pero aparte de eso, ¡fue bastante rápido!