数百メガバイトの明らかに重複したロケール.jsファイル

バックアップが500MBしかない小さなフォーラムで、50GBのディスクを使用しているにもかかわらず、ディスク容量不足で./launcher rebuildが失敗しています。他にクリーンアップできるものがないか調べている間に(apt autoremove./launcher cleanupでは何も得られませんでした)、/var/lib/docker/overlay2/.../merged/var/www/discourse/public/assets/localesに何百MBもの無用なロケールがあるのを見つけました。

残念ながら、スクリーンショットを撮る前に削除を開始してしまいましたが、同じ言語に対して多くの重複した、明らかにトランスパイルされたJavaScriptファイルが見られます。Discourseのコードでこれを回避するために何かできることはありますか?.mapファイルは何かで使用されていますか?

ちなみに、私のフォーラムは英語のみを使用しています。他のすべての言語をオプトアウトするにはどうすればよいですか?

/usr/lib/localeにも、手動で解放したくない数百MBのロケールがあります。

「いいね!」 1

このサーバーでDiscourseのみを実行していることを前提とすると、以下を試すことができます。

cd /var/discourse
./launcher stop app
docker rmi -f $(docker images -aq)
./launcher rebuild app

これによりDiscourseが停止し、すべてのDockerイメージが削除され、Discourseが再構築され、現在のイメージがダウンロードされます。

蓄積されるファイルについては、@david、ローカルストレージ用の rake s3:expire_missing_assets のようなものはありますか?

「いいね!」 2

コンテナ内の /var/www/discourse/public ディレクトリはホストにマウントされていません…そのため、標準的なインストールで ./launcher rebuild app を実行すると、すべて破棄されるはずです。:thinking:

「いいね!」 1

しかし、ウェブのアップデートについてはどうですか?

サーバーは確かに Discourse のみを実行しています。

コマンドを実行したところ、ロケールに関するいくつかのエラーが発生し、現在は FATAL: database files are incompatible with server. The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 15.12 という出力でスタックしています。

誤って重要なロケールファイルを削除してしまったのでしょうか? en_US.UTF-8 は正常に再生成されたようです。

# uname -a
Linux localhost 4.4.0-266-generic #300-Ubuntu SMP Mon Feb 17 19:45:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
root@localhost:/var/discourse# docker rmi -f $(docker images -aq)
Untagged: discourse/base:2.0.20250226-0128
Untagged: discourse/base@sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Deleted: sha256:557b1ff6168ad5bc1d1d80c6eaf6c10459780536cc281d020194a60aba9d833e
Untagged: local_discourse/app:latest
Deleted: sha256:06d986a896b239daabb5ed5ba64f70cb55ba53dc58e8c5147c19068378a2252d
Deleted: sha256:5f2aa2694b8b8e8ee8ac1a43dcf9d804ef9db3da11fc78027520c043408cc575
Error: No such image: 5f2aa2694b8b
root@localhost:/var/discourse# ./launcher rebuild app
WARNING: Docker version 20.10.7 deprecated, recommend upgrade to 24.0.7 or newer.
x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

2.0.20250226-0128: Pulling from discourse/base
af302e5c37e9: Already exists
ed49ab5c933d: Already exists
4d13d450f300: Already exists
[...].
bc6c17ae1969: Already exists
d19f089ead0e: Already exists
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Downloaded newer image for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 600 app
app
2.0.20250226-0128: Pulling from discourse/base
Digest: sha256:6f18aa2cd22bba0deb91d69194e577d4f96130ad555ae8ec646a8792cbfe37db
Status: Image is up to date for discourse/base:2.0.20250226-0128
docker.io/discourse/base:2.0.20250226-0128
/usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups.rb
/usr/local/bin/pups --stdin
I, [2025-04-03T17:28:37.320187 #1]  INFO -- : Reading from stdin
I, [2025-04-03T17:28:37.358715 #1]  INFO -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2025-04-03T17:28:37.369442 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2025-04-03T17:28:37.376162 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2025-04-03T17:28:37.381934 #1]  INFO -- : File > /root/install_postgres  chmod: +x  chown:
I, [2025-04-03T17:28:37.386982 #1]  INFO -- : File > /root/upgrade_postgres  chmod: +x  chown:
I, [2025-04-03T17:28:37.389829 #1]  INFO -- : Replacing data_directory = '/var/lib/postgresql/15/main' with data_directory = '/shared/postgres_data' in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.391604 #1]  INFO -- : Replacing (?-mix:#?listen_addresses *=.*) with listen_addresses = '*' in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.398346 #1]  INFO -- : Replacing (?-mix:#?synchronous_commit *=.*) with synchronous_commit = $db_synchronous_commit in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.399876 #1]  INFO -- : Replacing (?-mix:#?shared_buffers *=.*) with shared_buffers = $db_shared_buffers in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.401239 #1]  INFO -- : Replacing (?-mix:#?work_mem *=.*) with work_mem = $db_work_mem in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.402470 #1]  INFO -- : Replacing (?-mix:#?default_text_search_config *=.*) with default_text_search_config = '$db_default_text_search_config' in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.403467 #1]  INFO -- : Replacing (?-mix:#?checkpoint_segments *=.*) with checkpoint_segments = $db_checkpoint_segments in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.404421 #1]  INFO -- : Replacing (?-mix:#?logging_collector *=.*) with logging_collector = $db_logging_collector in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.405408 #1]  INFO -- : Replacing (?-mix:#?log_min_duration_statement *=.*) with log_min_duration_statement = $db_log_min_duration_statement in /etc/postgresql/15/main/postgresql.conf
I, [2025-04-03T17:28:37.406950 #1]  INFO -- : Replacing (?-mix:^#local +replication +postgres +peer$) with local replication postgres  peer in /etc/postgresql/15/main/pg_hba.conf
I, [2025-04-03T17:28:37.407960 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*127.*$) with host all all 0.0.0.0/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-04-03T17:28:37.408886 #1]  INFO -- : Replacing (?-mix:^host.*all.*all.*::1\/128.*$) with host all all ::/0 md5 in /etc/postgresql/15/main/pg_hba.conf
I, [2025-04-03T17:28:37.409731 #1]  INFO -- : > if [ -f /root/install_postgres ]; then
  /root/install_postgres && rm -f /root/install_postgres
elif [ -e /shared/postgres_run/.s.PGSQL.5432 ]; then
  socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
fi

failed to set locale!
[error] character map file `UTF-8' not found: No such file or directory
failed to set locale!
[error] default character map file `ANSI_X3.4-1968' not found: No such file or directory
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "en_US.UTF-8",
        LC_ALL = "en_US.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
popen failure: Cannot allocate memory
initdb: error: program "postgres" is needed by initdb but was not found in the same directory as "/usr/lib/postgresql/15/bin/initdb"
I, [2025-04-03T17:28:38.987799 #1]  INFO -- : Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
Upgrading PostgreSQL from version 13 to 15

I, [2025-04-03T17:28:38.988959 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main
I, [2025-04-03T17:28:38.991509 #1]  INFO -- : Terminating async processes
2025-04-03 17:28:39.091 UTC [51] FATAL:  database files are incompatible with server
2025-04-03 17:28:39.091 UTC [51] DETAIL:  The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 15.12 (Debian 15.12-1.pgdg120+1).


^C^C^C

プロセスは Ctrl+C に応答しません。

ええ、その場合はそのまま残ります。しかし、私たちはCLIアップデートを少なくとも6ヶ月に1回強制しているので、それが大きな問題になるとは思わないでしょう。

ロケールに関しては、最初にリクエストされたときに「ジャストインタイム」でコンパイルされるようにいくつかの変更を計画しています。ほとんどのサイトは1つの言語でしか運用されていないため、はるかに効率的になるはずです。

「いいね!」 3

これはまずいですね。サーバーのメモリは非常に少ないですか?スワップは設定されていますか?

データベースの更新については、PostgreSQL 15 updateを参照してください。

「いいね!」 1

サーバーには2GBのRAMがあります。スワップはさらに2GBに設定されています。

Ubuntu 16(知っています)から18にインプレースでアップグレードし、/var/discourse/containers/app.yml3つのロケール環境設定 を含むように更新しました。そして、Postgresのv13からの移行が成功し、Discourseの最新バージョンはUbuntu 18で問題なく動作しているようです。

「いいね!」 4