Ciao, sto cercando di incorporare i commenti di Discourse sul mio sito web seguendo la guida all’incorporamento, ma mi sono imbattuto in un muro ![]()
Sintomi
Ho provato su Firefox e Chrome. In entrambi i casi, viene caricato l’iframe di Discourse con il messaggio “Caricamento discussione…”, ma si blocca lì, con errori JavaScript ricorrenti nella console per sviluppatori.
Su Firefox, ricevo un errore relativo a X-Frame-Options:
È stato rilevato un header X-Frame-Options non valido durante il caricamento di “https://discourse.29th.local/embed/comments?embed_url=https%3A%2F%2Fpersonnel.29th.local%2F%23enlistments%2F11927”: “ALLOWALL” non è una direttiva valida.
Seguito da un errore DOMException in embed-application.js:7:
Uncaught DOMException: È stata specificata una stringa non valida o illegale
Questi due errori si ripetono ogni 30 secondi circa. Non ci sono richieste fallite nella scheda di rete.
Su Chrome, non ricevo l’errore X-Frame-Options. Dopo alcuni secondi, ottengo un errore relativo all’origine di destinazione che non corrisponde all’origine della finestra destinataria:
Impossibile eseguire 'postMessage' su 'DOMWindow': l'origine di destinazione fornita ('https://discourse.29th.local') non corrisponde all'origine della finestra destinataria ('https://personnel.29th.local').
Ho visto molti argomenti su meta riguardanti questo errore e ho provato tutti i passaggi di risoluzione dei problemi, senza successo.
La mia configurazione
Ho seguito la guida all’installazione di Discourse per Mac con una leggera eccezione: invece di installare postgres, redis e mailcatcher globalmente sul mio laptop, li ho eseguiti in container Docker, con le porte esposte pubblicamente. Discourse non sa che sono in esecuzione in container Docker invece che su hardware dedicato. Rails/Discourse è installato globalmente e non è in esecuzione in un container Docker.
Completamente separatamente, la mia applicazione web personalizzata è in esecuzione in uno stack Docker Compose. Parte di quello stack include un server nginx che instrada personnel.29th.local al container upstream appropriato e discourse.29th.local a host.docker.internal:3000 (questo è l’hostname magico che i container Docker possono utilizzare per raggiungere la localhost dell’host).
(Come accenno di seguito, ho rimosso il livello nginx dall’equazione e ho ottenuto lo stesso errore)
Un possibile problema qui è che la mia app web è una single page application JavaScript. La pagina in cui vengono incorporati i commenti di Discourse è https://personnel.29th.local/#enlistments/1234 e non c’è rendering lato server. Se questo fosse un problema, mi aspetterei un errore con il crawler, nel qual punto mi accontenterei che Discourse si limitasse a creare un link alla mia app invece di scansionarla. Ma gli errori che mostra non sembrano correlati a fallimenti di scansione.
Risoluzione dei problemi
Ho impostato l’host incorporabile in Admin > Personalizza > Incorporamento su personnel.29th.local. All’inizio, il codice di esempio per l’incorporamento mostrava http://localhost:3000/ per discourseUrl, quindi ho avviato rails console ed eseguito:
SiteSetting.force_hostname = "discourse.29th.local"
SiteSetting.port = 443
E ho attivato “forza https” nella dashboard di amministrazione. Questo ha corretto l’URL nel codice di esempio per l’incorporamento.
Ho anche aggiunto https://personnel.29th.local come dominio CORS nella sezione cors origins delle impostazioni.
Ora sto avviando Discourse con il seguente comando:
DISCOURSE_DEV_HOSTS=discourse.29th.local,host.docker.internal DISCOURSE_ENABLE_CORS=true bundle exec rails server
Ho anche provato a disabilitare la Content Security Policy nella dashboard delle impostazioni.
Ho controllato su https://discourse.29th.local/logs/ ma non ho visto errori e nulla riguardo a Sidekiq.
A proposito di Sidekiq, ho un messaggio sulla dashboard di amministrazione sugli aggiornamenti:
Non è stata eseguita una verifica degli aggiornamenti. Assicurati che Sidekiq sia in esecuzione.
Quindi ho eseguito Sidekiq.redis { |r| puts r.flushall } nella console di rails e ho ottenuto OK, ho riavviato il server rails e non ci sono state modifiche al messaggio né al problema complessivo. Ho dato un’occhiata alla cache di redis e non ho visto nulla relativo a questa pagina.
Ho anche tentato di semplificare le cose rimuovendo il livello nginx dall’equazione: ripristinando SiteSetting.force_hostname e SiteSetting.port a nil, disattivando force https, accedendo alla mia app web e a Discourse tramite localhost, e aggiungendo la mia app web agli host incorporabili e ai nomi host CORS di Discourse (http://localhost:8080), ma ho ottenuto lo stesso errore, solo con host diversi:
Impossibile eseguire 'postMessage' su 'DOMWindow': l'origine di destinazione fornita ('http://localhost:3000') non corrisponde all'origine della finestra destinataria ('http://localhost:8080').
Sto eseguendo la versione 2.6.0.beta6 ( 60bc38e6a8 ), che ho ottenuto clonando il ramo master come indicato nella guida all’installazione di Discourse per Mac un paio di settimane fa ed eseguendo git pull origin master oggi.
Ho anche rimosso la directory tmp e riavviato il server.
Ho anche fatto una passeggiata, urlato contro un cuscino e pianto sotto la mia scrivania.
Spero che questo copra tutti gli aspetti. Spero che qualcuno possa aiutarmi!
