Ах, понял, да, разные ОС и прочее. Уже кто-то спросил, как я это сделал — я опубликую здесь на всякий случай.
Вам понадобится Ruby 3.2.x (через rbenv, чтобы не зависеть от ОС), Node v16.19.x/npm 8.19.x и PostgreSQL (версия, скорее всего, любая выше 11).
- Я создал файл
.ruby-version, в котором указал версию Ruby, которую я установил (3.2.2).
- Выполнил
bundle, и все gem-пакеты собрались без проблем.
- В самой PostgreSQL нужно было настроить базу данных:
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;
Я был удивлен, что database.yml не принимает переменные для окружения production (это кажется очень анти-Rails-конвенцией). Все настройки БД находились в config/discourse.conf, вместе со значениями SMTP. Я их заполнил.
Затем выполнил миграции базы данных:
bundle exec rails db:migrate
Всё сработало отлично, миграции прошли успешно.
- В файле
config/sidekiq.yml, после секции development, я добавил:
production:
:concurrency: 2
:queues:
- [critical, 2]
- [default, 1]
- [low]
- [ultra_low]
- Затем отредактировал
lib/tasks/assets.rake, примерно на строке 151, добавив:
harmony: true,
чтобы это выглядело так:
uglified, map =
Uglifier.new(
comments: :none,
harmony: true,
source_map: {
filename: File.basename(from),
output_filename: File.basename(to),
},
).comp
И установил следующие npm-пакеты:
npm install terser
npm install -g uglify-js@"<3"
Затем собрал ассеты:
RAILS_ENV=production bundle exec rake assets:precompile
И вуаля! Теперь это должно работать:
bundle exec sidekiq -e production -C config/sidekiq.yml
bundle exec puma --config config/puma.rb -e production
Это запускает sidekiq и веб-сервер puma.
(намного дешевле и больше контроля, например, у меня уже запущен Ruby 3.2.2). Большую часть времени я потратил на обход странностей (например, поиск значений production, так как они находились не там, где должны быть). Но в остальном всё было довольно быстро!