Errore a causa di database timeout

La richiesta per la home page http://10.201.61.8/forum
il tempo di richiesta ha superato i 5 secondi.
image

Riceviamo sempre l’errore Oops
Esiste qualche restrizione per le richieste che superano i 5 secondi, o altre restrizioni? Grazie!

Oops

Il software che gestisce questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per il disagio.

Sono state registrate informazioni dettagliate sull’errore e generata una notifica automatica. Ci occuperemo di esaminarla.

Non è necessario intraprendere ulteriori azioni. Tuttavia, se l’errore persiste, puoi fornire ulteriori dettagli, inclusi i passaggi per riprodurre l’errore, pubblicando un argomento di discussione nella categoria feedback del sito.

Sembra che tu stia eseguendo un proxy personalizzato davanti al sito che ne causa il timeout.


utilizziamo un proxy nginx personalizzato all’esterno.

Sembra che tu debba modificare la configurazione del proxy nginx personalizzato all’esterno, quindi.

a volte possiamo accedere al web normalmente quando il tempo della richiesta non supera i 5 secondi.

Quindi tutta la configurazione dovrebbe funzionare correttamente.
Ma quando la richiesta supera i 5 secondi, otteniamo solo “Oops”.
Dubito che ci sia qualche restrizione sulle richieste che superano i 5 secondi.

la configurazione nginx personalizzata all’esterno come sotto

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

l’app.yml come sotto:

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           # (opzionale, default true)
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

  DISCOURSE_NOTIFICATION_EMAIL: jxwoeuxer@gmail.com   # (indirizzo da cui inviare le notifiche)

  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 "Inizio dei comandi personalizzati"
  - 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 "Fine dei comandi personalizzati"

Prova a rimuovere il reverse proxy e lascia che il container si leghi direttamente alle porte 80/443, quindi verifica se il problema persiste.

Grazie!
Ma devo usare nginx esterno perché non ci sono più porte disponibili per il mio Discourse.

Sono entrato nel contenitore Discourse e ho eseguito

curl http://localhost:3000/forum, ma ottengo lo stesso errore

---
# # # curl http://localhost:3000/forum
<!DOCTYPE html>
<html>
<head>
  <title>Ops - Errore 500</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <h1>Ops</h1>
    <p>Il software che gestisce questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per l'inconveniente.</p>
    <p>Sono state registrate informazioni dettagliate sull'errore e generata una notifica automatica. Esamineremo il problema.</p>
    <p>Non è necessaria alcuna ulteriore azione. Tuttavia, se l'errore persiste, puoi fornire ulteriori dettagli, inclusi i passaggi per riprodurre l'errore, pubblicando un argomento nella categoria feedback del sito.</p>
</body>
</html>

Uso il tuo Discourse open source
Ho solo bisogno di utilizzare un nginx esterno e di una sottocartella per il percorso dell’URL
@Falco

Forse ci sono delle ragioni legate al database.
Ho notato che il database è molto lento.
Ho impostato db_timeout = 10, ma dopo 10 secondi otteniamo un errore.
Forse dovrei rendere il database più veloce.

Ho risolto il problema. L’impostazione di 5 secondi è un valore predefinito del database. Abbiamo modificato l’impostazione come segue:

DISCOURSE_DB_TIMEOUT: 10000
DISCOURSE_DB_CONNECT_TIMEOUT: 10

e altro ancora
Abbiamo notato che il database era molto lento.
Quindi abbiamo utilizzato un nuovo database su Linux invece di quello vecchio su Windows.

Grazie comunque. Discourse è davvero fantastico.