Oups, erreur due à database timeout

La requête pour la page d’accueil http://10.201.61.8/forum
a dépassé le temps limite de 5 secondes.
image

Nous rencontrons toujours l’erreur Oops.
Existe-t-il une restriction concernant les requêtes dépassant 5 secondes, ou toute autre restriction ? Merci !

Oops

Le logiciel alimentant ce forum de discussion a rencontré un problème inattendu. Nous nous excusons pour la gêne occasionnée.

Des informations détaillées sur l’erreur ont été enregistrées et une notification automatique a été générée. Nous allons l’examiner.

Aucune action supplémentaire n’est nécessaire. Cependant, si l’erreur persiste, vous pouvez fournir des détails supplémentaires, y compris les étapes pour reproduire l’erreur, en publiant un sujet de discussion dans la catégorie « Retour d’expérience » du site.

Ça ressemble à un proxy personnalisé que vous exécutez devant le site et qui provoque un dépassement de délai.

Oui
nous utilisons un proxy nginx personnalisé à l’extérieur.

Il semble que vous deviez modifier la configuration du proxy nginx personnalisé à l’extérieur.

Parfois, nous pouvons accéder normalement au Web lorsque le temps de la demande ne dépasse pas 5 secondes.

Donc, toute la configuration devrait fonctionner.
Mais lorsque la requête dépasse 5 secondes, nous obtenons simplement Oops.
Je soupçonne qu’il existe une restriction concernant les requêtes dépassant 5 secondes.

La configuration nginx personnalisée à l’extérieur est la suivante

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;
   }
}

le fichier app.yml ci-dessous :

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           # (optionnel, par défaut true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

  DISCOURSE_NOTIFICATION_EMAIL: jxwoeuxer@gmail.com   # (adresse d'envoi des notifications)

  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 "Début des commandes personnalisées"
  - 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 "Fin des commandes personnalisées"

Essayez de supprimer le proxy inverse et de laisser le conteneur se lier directement aux ports 80/443, puis vérifiez si le problème persiste.

Merci !
Mais je dois utiliser nginx externe car il n’y a plus de port disponible pour mon Discourse.

J’ai accédé au conteneur Discourse et exécuté

curl http://localhost:3000/forum, puis j’ai obtenu la même erreur

---
# # # curl http://localhost:3000/forum
<!DOCTYPE html>
<html>
<head>
  <title>Oups - Erreur 500</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <h1>Oups</h1>
    <p>Le logiciel qui alimente ce forum de discussion a rencontré un problème inattendu. Nous nous excusons pour la gêne occasionnée.</p>
    <p>Des informations détaillées sur l'erreur ont été consignées et une notification automatique a été générée. Nous allons l'examiner.</p>
    <p>Aucune action supplémentaire n'est nécessaire. Cependant, si le problème persiste, vous pouvez fournir des détails supplémentaires, y compris les étapes pour reproduire l'erreur, en publiant un sujet de discussion dans la catégorie de commentaires du site.</p>
</body>
</html>

J’utilise votre Discourse open source
J’ai simplement besoin d’utiliser un nginx externe et d’avoir un sous-dossier pour le chemin d’URL
@Falco

Il y a peut-être une raison liée à la base de données.
Je constate que la base de données est très lente.
J’ai modifié db_timeout = 10, puis nous avons reçu une erreur après 10 secondes.
Je devrais peut-être rendre la base de données plus rapide.

J’ai résolu le problème. Le paramètre de 5 secondes est une valeur par défaut de la base de données. Nous avons modifié le paramètre comme suit :

DISCOURSE_DB_TIMEOUT: 10000
DISCOURSE_DB_CONNECT_TIMEOUT: 10

et plus encore
Nous avons constaté que la base de données était très lente.
Nous avons donc utilisé une nouvelle base de données sous Linux à la place de l’ancienne sous Windows.

Merci quand même. Discourse est vraiment formidable.