なるほど、OSの違いなどがあるのですね。すでに「どうやったのか」と聞かれているので、ここに投稿しておきます。
Ruby 3.2.x(rbenv経由でOSに依存しないように)、Node v16.19.x/npm 8.19.x、PostgreSQL(11以上のバージョンならおそらくどれでも)が必要です。
- Rubyのバージョンを指定する
.ruby-versionファイルを作成し、インストールしました(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の慣習のように思えます)ことに驚きました。すべてのDB設定は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 Webサーバーが起動します。
(はるかに安価で、より多くの制御が可能になります。たとえば、すでにRuby 3.2.2を使用しています)。ほとんどの時間は、quirks(たとえば、production値が本来あるべき場所にないことなど)を回避するのに費やされました。しかし、それ以外は非常に迅速でした!