Modifiche recenti che compromettono la configurazione delle sottocartelle?

Mi scuso se ho diagnosticato male il problema, ma recentemente ho riscontrato alcuni problemi dopo un aggiornamento su una configurazione in sottocartella che funzionava in precedenza, quindi penso che possa esserci stata una regressione su alcuni fronti in tempi recenti? In particolare, sto auto-ospitando Discourse utilizzando la configurazione in sottocartella descritta qui, che funzionava felicemente (per quanto ne so) fino a poco tempo fa.

Attualmente, quando accedo utilizzando SSO o quando passo dalla modalità anonima e viceversa (e forse anche in altre situazioni che non ho ancora individuato), vengo reindirizzato a https://my_machine/discourse_path_stuff, invece di essere reindirizzato a https://my_machine/forum/discourse_path_stuff. Succede anche che quando vado su https://my_machine/forum (l’endpoint corretto), la barra degli indirizzi viene modificata per mostrare https://my_machine (con la sottocartella rimossa), anche se la maggior parte dei link sembra risolvere correttamente.

Purtroppo non ricordo su quale commit ero quando le cose funzionavano, ma sono abbastanza sicuro che fosse sotto l’ombrello “2.4.0.beta10” e probabilmente era nei circa 10 giorni precedenti. Attualmente sto eseguendo bd49d4af1a.

Mi scuso se sto semplicemente facendo qualcosa di stupido, e sono felice di aiutare a individuare il problema se ci sono suggerimenti su dove dovrei guardare.

1 Mi Piace

Puoi condividere l’URL del sito? Stai utilizzando il nostro protocollo SSO o una strategia OAuth2 / omniauth?

2 Mi Piace

Certo, si trova all’indirizzo https://py.mit.edu/forum (ma al momento è bloccato dalla visualizzazione pubblica). https://py.mit.edu/forum/login dimostra il problema (anche se ho aggiunto una regola NGINX specifica per reindirizzare con codice 302 https://py.mit.edu/login a https://py.mit.edu/forum/login non appena abbiamo notato questo comportamento, il che ha funzionato come soluzione temporanea per la parte SSO, almeno).

Stiamo utilizzando il protocollo SSO di Discourse, che funzionava sicuramente senza problemi in precedenza. L’handshake sembra ancora avvenire correttamente, ma alla fine viene reindirizzato al posto sbagliato. La chiave "return_sso_url" nel payload SSO torna correttamente al nostro endpoint SSO (con /forum).

Ho anche provato a eseguire un rebuild, ma non sembra aver risolto il problema.

Purtroppo, potrebbe essere difficile fare il debug di questo problema poiché non mi sento a mio agio nel dare accesso a persone esterne, dato che questa istanza esiste per un corso e non mi sento a mio agio nel condividere dati degli studenti con terze parti (anche se mi fido di te personalmente!). Tuttavia, se può aiutare, sono felice di provare a replicare questa configurazione su un server diverso a cui potrei darti accesso…

3 Mi Piace

Vedo anche che il link per entrare/uscire dalla modalità anonima utilizza window.location.reload() per ricaricare la pagina dopo aver inviato una richiesta a un endpoint per passare alla modalità anonima. Quindi quel ricaricamento vedrebbe sicuramente l’URL riscritto (non più contenente /forum), il che causerebbe questo problema (non sono sicuro se sia una situazione simile per i problemi di SSO).

Darò un’occhiata ai recenti changeset per vedere se la cosa che (penso?) riscrive window.location sia un’aggiunta recente.

Inoltre, Discourse.getURL('/login') mi restituisce ancora il risultato corretto (con /forum).

1 Mi Piace

I percorsi si resettano senza il prefisso della sottocartella nella barra degli indirizzi del browser.

Esempio:
Visito example.com/forum → dopo il caricamento del forum, la barra degli indirizzi mostra example.com
Poi clicco su “Latest” → vengo reindirizzato a latest e la barra degli indirizzi mostra example.com/forum/latest
Aggiorno la pagina nel browser, il sito si ricarica e la barra degli indirizzi mostra example.com/latest
Quando ricarico di nuovo mentre sono su example.com/latest, ottengo un errore 404 (perché il mio nginx instrada solo /forum a Discourse).

L’anteprima del link in basso a sinistra nel browser viene mostrata come example.com/latest, example.com/new, ecc. Ricaricare un argomento rimuove anche /forum dall’URL, ma poi cambia di nuovo, tornando a /forum/t/[…].

Ero precedentemente alla versione 2.4.0.beta2 e non ricordo questo problema.

3 Mi Piace

Questa installazione è stata creata seguendo Supporto per sottocartelle con Docker? Puoi fornire un collegamento ad essa?

7 Mi Piace

Sì, l’ho provato anche su una nuova installazione locale e ho riscontrato lo stesso problema:

app.yml

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"

expose:
 - 80:80

params:
  db_default_text_search_config: "pg_catalog.english"
  version: tests-passed

env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 3
  DISCOURSE_RELATIVE_URL_ROOT: /forum
  DISCOURSE_HOSTNAME: localhost
  DISCOURSE_DEVELOPER_EMAILS: yyy

  DISCOURSE_SMTP_ADDRESS: yyy
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: yyy@yyy.yyy
  DISCOURSE_SMTP_PASSWORD: yyy
  DISCOURSE_SMTP_AUTHENTICATION: login

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

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

run:
    - 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: etag off;
       to: |
          etag off;
          location /forum {
             rewrite ^/forum/?(.*)$ /$1;
          }
5 Mi Piace

Posso riprodurre il problema sulla mia installazione in sottocartella. Provvederemo a risolverlo.

6 Mi Piace

Ottimo, grazie! Sono contento di sapere di non essere pazzo.

Tuttavia, esaminando i commit recenti (più o meno), non sono riuscito a individuare un punto evidente in cui avvenisse questa riscrittura. Sarebbe possibile ricevere un riferimento su dove nel codice ciò sta o stava avvenendo? (Sto cercando di familiarizzare con la base di codice).

1 Mi Piace

Sarebbe possibile! Solo che non sono la persona giusta. Sono semplicemente “quello” del team che per caso ha un’installazione locale in una sottocartella. Ma non sono un ingegnere. David dovrebbe essere in grado di indicarti la direzione giusta quando inizierà a lavorare sul problema più avanti questa settimana.

6 Mi Piace

Quasi sicuramente questa modifica che era relativa a questo problema. Non sono sicuro esattamente di quale sia il problema, ma ci sto dando un’occhiata :eyes:

6 Mi Piace

Risulta che non c’era alcuna relazione con quell’commit. Ho individuato la causa del problema e una soluzione è in via di approvazione:

12 Mi Piace

Ottimo lavoro da detective :man_detective:, @david :clap:

6 Mi Piace

Questo è stato ora unito - @hartz e @bokos, potete confermare che il problema è stato risolto dopo l’aggiornamento?

5 Mi Piace

Dopo un po’ di test, sembra che le cose funzionino di nuovo. Grazie, @david!

2 Mi Piace