# Rake:rebakeエラーでクラッシュ: PG::ConnectionBad: PQsocket

**URL:** https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344
**Category:** Self-hosting
**Tags:** server-resources
**Created:** [2023 年 2 月 27 日午前 6:03 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344 "2023-02-27T06:03:26Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 27 日午前 6:03 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/1 "2023-02-27T06:03:26Z")

</div>

新しいサーバーに200,000件の投稿があるフォーラムを移行しました。ダウンタイムを避けるため、ライブサイトは読み取り専用モードにしました。

ユーザーがインストール画面や復元中に発生する可能性のある問題を見ないように、バックアップを別のサブドメインに復元しました。例えば `dev.example.com` のようなものです。

復元が完了したらすぐに、DNSを新しいサーバーに向け、`app.yml` ファイルのドメインを通常の `forum.example.com` に変更しました。

すると、元の投稿のすべてのスマイリーが `dev.example.com` サーバーを指していたため、`rake:rebake` を実行しました。

1,000〜2,000件の投稿を処理すると、データベース接続に関するエラーでクラッシュします。

以下にいくつかの抜粋を示します。

```plaintext
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/exe/bundle:45:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.4/exe/bundle:33:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
     1999 / 200968 ( 1.0%)
Failed to rebake (topic_id: 78730, post_id: 210607)
PG::ConnectionBad: PQsocket() can't get socket descriptor

```

```plaintext
/var/www/discourse/lib/tasks/posts.rake:108:in `rebake_posts_all_sites'
/var/www/discourse/lib/tasks/posts.rake:7:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'

Caused by:
PG::ConnectionBad: PQsocket() can't get socket descriptor

```

現在、`dev.example.com` ドメインを `forum.example.com` ドメインにリダイレクトすることで画像を読み込めるようにしていますが、これは一時的な解決策です。

このエラーを回避してすべての投稿をリベイクする方法を知っている人はいますか？データベースに過負荷がかかっているのでしょうか？

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023 年 2 月 27 日午後 2:40 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/2 "2023-02-27T14:40:31Z")

</div>

まず、[ドメイン名を変更またはDiscourseの名前を変更する](https://meta.discourse.org/t/change-the-domain-name-or-rename-your-discourse/16098)を参照してください（ただし、別の解決策として、バックアップしてから新しいホスト名で復元することもできます）。

データベースへの接続が不足していることが原因だと推測しますが、それは私が予想するエラーではありません。

これは標準的なインストールですか、それとも他のPGサーバーを使用していますか？

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 27 日午後 7:13 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/3 "2023-02-27T19:13:43Z")

</div>

リンクをありがとうございます。DigitalOceanのドロップレット（「Premium AMD」、RAM 4GB、vCPU 2基）に標準的なDockerをインストールしています。

お教えいただいたリンクの手順に従いました。設定の中に間違ったURLがいくつかあったので、それらを修正し、念のためフォーラムを再構築しました。

その後、次のようなコマンドを実行しました。

```plaintext
discourse remap dev.example.com forum.example.com

```

そのコマンドは次のようなエラーでクラッシュしました。

```plaintext
Error: ERROR: duplicate key value violates unique constraint "unique_post_links"
DETAIL: Key (topic_id, post_id, url)=(78821, 207117, https://forum.example.com/t/the-slug/78946/7) already exists.

```

そこで、言及されたURL（`https://forum.example.com/t/the-slug/78946/7`）にリンクしていた投稿を一時的に削除し、コマンドを再度実行したところ、クラッシュせずに動作しました。

その後、`rake posts:rebake`を再度実行しました。

いくつかの投稿で次のような失敗がありましたが、処理は続行しました（これらの投稿のHTMLは手動で再構築しました）。

```plaintext
Rebaking post markdown for 'default'
     2273 / 200996 ( 1.1%)
Failed to rebake (topic_id: 66586, post_id: 210353)
JavaScript was terminated (either by timeout or explicitly)

```

最終的に、次のようなエラーで11,000件の投稿に達する直前でクラッシュしました。

```plaintext
/usr/local/bin/bundle:25:in `<main>'
    10996 / 200996 ( 5.5%)
Failed to rebake (topic_id: 76678, post_id: 200988)
PG::ConnectionBad: PQsocket() can't get socket descriptor
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:69:in `exec_params'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-mini-profiler-3.0.0/lib/patches/db/pg.rb:69:in `exec_params'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.1/lib/active_record/connection_adapters/postgresql_adapter.rb:768:in `block (2 levels) in exec_no_cache'

```

サイトがダウンしているとUptime Robotから通知があったため、サーバー全体がオフラインになったようです。

このコマンドを実行するにはサーバーのパワーが足りないと思われますか？ 🤔

通常、RAM使用率は80%を超えており、コマンド実行中は100%に達します。メモリが不足したのかもしれません。

 ![image](https://global.discourse-cdn.com/meta/original/4X/b/1/8/b187d4a1ec1d87d81ae43801e76453666d618bdc.png)

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2023 年 2 月 27 日午後 7:46 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/4 "2023-02-27T19:46:09Z")

</div>

ローカルディスクがある場合、スワップを追加してメモリ不足を回避できます（それが問題の原因であるかどうかは関係ありません）。`free` は何を示していますか？ `dmesg` の出力に `oom` または `memory` は表示されていますか？

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 27 日午後 9:41 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/5 "2023-02-27T21:41:35Z")

</div>

> [@Ed\_S](#):
>
> `free`は何を示していますか？

現在の表示は以下の通りです。

```plaintext
              total used free shared buff/cache available
Mem: 3.8Gi 2.1Gi 160Mi 1.0Gi 1.6Gi 488Mi
Swap: 0B 0B 0B

```

> [@Ed\_S](#):
>
> `dmesg` の出力に `oom` または `memory` は表示されますか？

`oom` は表示されませんが、メモリの予約や解放に関する箇所で `memory` という単語が数回表示されます。

サーバーは 4GB の RAM で作成されたため、Discourse は [自動的にスワップファイルを作成しませんでした](https://meta.discourse.org/t/create-a-swapfile-for-your-linux-server/13880)。追加する価値はあると思いますか？

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2023 年 2 月 27 日午後 10:27 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/6 "2023-02-27T22:27:57Z")

</div>

ディスク容量に余裕があれば、スワップを2G追加する価値は間違いなくあります。

もう一つは、大きなジョブを実行中に使用状況を監視することです。`vmstat 5 5` を使用し、ファイルにログを記録することも検討してください。siまたはsoの列に大きな値が表示されず、swpd列がスワップサイズに近づかないことを期待しています。

この投稿も参照してください。

> [@Ed\_S](#):
>
> 状況が最も失敗に近いところで捉えようとして、`vmstat 5` を使用しました。

（データベースシステムが何らかのリソースを使い果たしている可能性がありますが、それについては何も知りません。）

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 27 日午後 10:30 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/7 "2023-02-27T22:30:53Z")

</div>

ありがとうございます。後で試してみます。現在50GB空きがあります。

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 28 日午前 7:15 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/8 "2023-02-28T07:15:35Z")

</div>

2GBのスワップファイルを追加したところ、問題が解決したようです。リベイクはまだ20%しか完了していませんが、エラーは一度も発生しておらず、RAM使用率は100%を下回っています。

お二人とも、ご協力ありがとうございました。

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2023 年 2 月 28 日午前 8:17 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/9 "2023-02-28T08:17:19Z")

</div>

結構です！参考までに

- vmstat や free（または top）でスワップが枯渇していることが示されている場合、タスクの実行中でもスワップを増やすことができます。
- 注意すれば、より多くの RAM を搭載したインスタンスに元に戻せる一時的なアップグレードを行うことができるでしょう。費用は少しだけかかりますが、数時間だけで済みます。ディスクサイズの大きいインスタンスへの移行は元に戻せないため、 **重要** です。RAM が多いほど、タスクはフルスピードで実行され、RAM が少なくスワップが多いとパフォーマンスが低下し、タスクの完了に時間がかかる可能性があります。

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 28 日午後 6:03 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/10 "2023-02-28T18:03:43Z")

</div>

> [@Ed\_S](#):
>
> よりRAMの多いインスタンスに一時的かつ元に戻せるアップグレードをすれば、おそらくできるでしょう

そうしようかと思いましたが、サーバーをシャットダウンしなければならず、サーバーを移動した際にユーザーはすでに迷惑な「読み取り専用」期間とダウンタイムを経験していました。😓

昨夜は寝なければならなかったので完了できませんでしたが、今は再び稼働しています。エラーなしでこれまでのところ30%完了しました。

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [2023 年 2 月 28 日午後 6:12 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/11 "2023-02-28T18:12:33Z")

</div>

vmstat やそれに類するもので監視を続けるとよいでしょう。これは非常に長時間実行されるジョブなので、再起動したくはないはずです。念のため、さらに 2G のスワップを追加することをお勧めします。

---

<div class="post-metadata">

### Author: ![j127](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j127/32/79093_2.png) [@j127](https://meta.discourse.org/u/j127)
#### Post date: [2023 年 2 月 28 日午後 11:55 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/12 "2023-02-28T23:55:20Z")

</div>

ありがとうございます。時々 `vmstat` で確認しました。tmux セッションで起動したので、デタッチしてラップトップをしばらく閉じることができました。コマンドの実行には 8 ～ 9 時間かかったと思われますが、すべてエラーなく完了しました。

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2023 年 3 月 30 日午後 11:56 UTC](https://meta.discourse.org/t/rake-rebake-crashes-with-errors-pg-pqsocket/256344/13 "2023-03-30T23:56:21Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
