データベースのタイムアウトによるエラー

ホームページへのリクエスト http://10.201.61.8/forum
リクエスト時間が5秒を超えました。
image

常に「Oops」というエラーが発生します。
リクエストが5秒を超えることに関する制限、あるいは他の制限はありますか?よろしくお願いいたします。

Oops

このディスカッションフォーラムを動作させているソフトウェアで予期せぬ問題が発生しました。ご迷惑をおかけし、申し訳ございません。

エラーの詳細な情報はログに記録され、自動通知が生成されました。確認いたします。

それ以上の対応は不要です。ただし、エラーが継続する場合は、エラーを再現する手順などを含む追加情報を、サイトのフィードバックカテゴリに投稿してご提供ください。

サイトの手前でカスタムプロキシを実行していて、タイムアウトが発生しているようです。

はい、外部でカスタム Nginx プロキシを使用しています。

カスタム nginx プロキシ側で設定を変更する必要がありますね。

時には、リクエスト時間が5秒を超えない場合、通常通りウェブにアクセスできることがあります。

そのため、すべての設定が正しく動作するはずです。
ただし、リクエストが5秒を超えると「Oops」と表示されてしまいます。
5秒を超えるリクエストに対する何らかの制限があるのではないかと疑っています。

以下の通り、カスタム Nginx 設定を外部に記述します。

server {
  listen       9000;
  server_name  localhost;
  root /opt/nginx/portal;
  location ~* ^.+\\.(jpg|jpeg|gif|png|bmp)$ {
    access_log off;
    expires 30d;
    break;
  }
  location / {
    index index.html index.htm;
  }
  
  location ^~/forum {
   add_header 'Access-Control-Allow-Origin' '*';
   add_header 'Access-Control-Allow-Credentials' 'true';
   add_header 'Access-Control-Allow-Headers' '*';
   proxy_pass http://unix:/opt/oca-forum/shared/ocaforum/nginx.http.sock:;
   proxy_redirect  off;
   }
}

以下の app.yml です:

templates:
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/cron.template.yml"
  - "templates/web.china.template.yml" 
  - "templates/web.socketed.template.yml"  

params:
  db_default_text_search_config: "pg_catalog.english"
  db_shared_buffers: "1280MB"

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  
  UNICORN_WORKERS: 8

  DISCOURSE_HOSTNAME: '10.201.61.8:9000'
  DOCKER_USE_HOSTNAME: false
  
  DISCOURSE_RELATIVE_URL_ROOT: /forum

  DISCOURSE_DEVELOPER_EMAILS: 'jxwoeuxer@gmail.com'


  DISCOURSE_SMTP_ADDRESS: gmail.smtp.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: jzwoeuxer@gmail.com
  DISCOURSE_SMTP_PASSWORD: "WEweoier2x2w3e"
  DISCOURSE_SMTP_ENABLE_START_TLS: false           # (オプション、デフォルトは true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

  DISCOURSE_NOTIFICATION_EMAIL: jxwoeuxer@gmail.com   # (通知を送信するアドレス)

  DISCOURSE_DB_HOST: 10.201.61.16
  DISCOURSE_DB_PORT: 5432
  DISCOURSE_DB_NAME: theforum
  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: postgres
  DISCOURSE_DB_PASSWORD: theforum16


volumes:
  - volume:
      host: /opt/oca-forum/shared/ocaforum
      guest: /shared
  - volume:
      host: /opt/oca-forum/shared/ocaforum/log/var-log
      guest: /var/log

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com.cnpmjs.org/discourse/docker_manager.git

run:
  - exec: echo "カスタムコマンドの開始"
  - exec:
      cd: $home
      cmd:
         - mkdir -p public/forum
         - cd public/forum && ln -s ../uploads && ln -s ../backups
  - replace:
      global: true
      filename: /etc/nginx/conf.d/discourse.conf
      from: proxy_pass http://discourse;
      to: |
         rewrite ^/(.*)$ /forum/$1 break;
         proxy_pass http://discourse;
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
      to: |
        location ~ ^/(svg-sprite/|letter_avatar/|letter_avatar_proxy/|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker) {
        rewrite ^/(svg-sprite|letter_avatar|letter_avatar_proxy|user_avatar|highlight-js|stylesheets|theme-javascripts|favicon/proxied|service-worker)/([^/]+):[0-9]+/(.*) /forum/$1/$2/$3  break; 
  - replace:
      filename: /etc/nginx/conf.d/discourse.conf
      from: etag off;
      to: |
        etag off;
        location /forum {
           rewrite ^/forum/?(.*)$ /$1;
        }
  - replace:
       filename: /etc/nginx/conf.d/discourse.conf
       from: $proxy_add_x_forwarded_for
       to: $http_your_original_ip_header
       global: true
  - exec: echo "カスタムコマンドの終了"

リバースプロキシを削除し、コンテナが直接 80/443 ポートにバインドするように設定して、問題が解消するか確認してください。

ありがとうございます!
しかし、Discourse のポートがもうないため、外部の Nginx を使用せざるを得ません。

Discourse コンテナに入り、以下のコマンドを実行しました。

curl http://localhost:3000/forum

すると、同じエラーが表示されます。

---
# # # curl http://localhost:3000/forum
<!DOCTYPE html>
<html>
<head>
  <title>Oops - Error 500</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <h1>Oops</h1>
    <p>このディスカッションフォーラムを動作させているソフトウェアで予期せぬ問題が発生しました。ご迷惑をおかけして申し訳ございません。</p>
    <p>エラーに関する詳細情報はログに記録され、自動的に通知が生成されました。確認いたします。</p>
    <p>これ以上の手順は不要です。ただし、エラー状態が解消しない場合は、サイトのフィードバックカテゴリにトピックを投稿し、エラーの再現手順など追加の詳細を提供してください。</p>
</body>
</html>

Discourse のオープンソース版を利用しています。
外部の nginx を使用し、URL パスにサブフォルダを割り当てる必要があるのですが。
@Falco

DB に何か理由があるかもしれません。
DB の動作が非常に遅いことがわかりました。
db_timeout を 10 に変更しましたが、10 秒後にエラーが発生しました。
DB の速度を上げる必要があるかもしれません。

問題を解決しました。5秒の設定はデフォルトのデータベース設定でした。以下の通り設定を変更しました。

DISCOURSE_DB_TIMEOUT: 10000
DISCOURSE_DB_CONNECT_TIMEOUT: 10

さらに、データベースが非常に遅いことが判明しました。そのため、Windows上の古いデータベースに代わり、Linux上の新しいデータベースを使用しています。

ご協力いただきありがとうございます。Discourseは素晴らしい製品です。