Página de upgrades totalmente em branco

Minha página de atualizações está completamente em branco.

Executei ./launcher rebuild app e consegui atualizar para a v2.6.0beta4, mas mesmo depois disso, a página de atualizações continua em branco. A tag <body> da página é:

<body class="highlighter-context">


</body>

Alguma sugestão?

Você pode compartilhar um link para o seu site?

1 curtida

É um fórum fechado. Fico feliz em compartilhar, mas imagino que isso faça a diferença, né?

Recomendo que você remova todos os plugins de terceiros e reconstrua. Além disso, tente o modo de segurança: ver Using Safe Mode to troubleshoot issues with themes and plugins

1 curtida

Obrigado. Tive um tempo para tentar isso. Várias opções no modo de segurança não ajudaram. Desativar todos os plugins de terceiros e incluir apenas o docker_manager também não mudou nada. Ainda assim, uma tela branca em branco.

Vi um post com o mesmo problema do início deste ano, mas o autor do tópico parou de responder, então não há causa ou resolução óbvia.

Recomendo postar uma versão sanitizada do seu app.yml … isso nos ajudará a descobrir o que está errado.

Certo, aqui está:

## este é o modelo de contêiner Docker Discourse tudo-em-um, autônomo
##
## Após fazer alterações neste arquivo, você DEVE reconstruir
## /var/discourse/launcher rebuild app
##
## TENHA *MUITO* CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se quiser adicionar o Lets Encrypt (https)
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.socketed.template.yml"

## quais portas TCP/IP este contêiner deve expor?
## Se você quiser que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
## consulte https://meta.discourse.org/t/17247 para detalhes
expose:
#  - "80:80"   # http
#  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Defina db_shared_buffers para no máximo 25% da memória total.
  ## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode sobrescrever
  db_shared_buffers: "128MB"

  ## pode melhorar o desempenho de classificação, mas aumenta o uso de memória por conexão
  #db_work_mem: "40MB"

  ## Qual revisão do Git este contêiner deve usar? (padrão: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Quantas solicitações web simultâneas são suportadas? Depende da memória e dos núcleos da CPU.
  ## será definido automaticamente pelo bootstrap com base nas CPUs detectadas, ou você pode sobrescrever
  UNICORN_WORKERS: 2

  ## TODO: O nome de domínio ao qual esta instância do Discourse responderá
  ## Obrigatório. O Discourse não funcionará com um número IP puro.
  DISCOURSE_HOSTNAME: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>

  ## Descomente se quiser que o contêiner seja iniciado com o mesmo
  ## nome de host (-h option) especificado acima (padrão "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de e-mails delimitados por vírgula que serão definidos como administradores e desenvolvedores
  ## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>

  ## TODO: O servidor de e-mail SMTP usado para validar novas contas e enviar notificações
  # ENDEREÇO SMTP, nome de usuário e senha são obrigatórios
  # AVISO: o caractere '#' na senha SMTP pode causar problemas!
  DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_SMTP_PASSWORD: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, padrão true)

  ## Se você adicionou o modelo Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>

  ## O endereço CDN http ou https para esta instância do Discourse (configurado para buscar)
  ## consulte https://meta.discourse.org/t/14857 para detalhes
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  # Configuração S3
  DISCOURSE_CDN_URL: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-west-002"
  DISCOURSE_S3_ENDPOINT: https://s3.us-west-002.backblazeb2.com
  DISCOURSE_S3_ACCESS_KEY_ID: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_S3_CDN_URL: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_S3_BUCKET: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_S3_BACKUP_BUCKET: <REMOVIDO PARA PUBLICAÇÃO PÚBLICA>
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

## O contêiner Docker é sem estado; todos os dados são armazenados em /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Plugins vão aqui
## consulte https://meta.discourse.org/t/19157 para detalhes
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-user-notes
          - git clone https://github.com/discourse/discourse-assign
          - git clone https://github.com/discourse/discourse-policy
          - git clone https://github.com/discourse/discourse-tooltips
          - git clone https://github.com/discourse/discourse-saved-searches
          - git clone https://github.com/discourse/discourse-knowledge-explorer
          - git clone https://github.com/discourse/discourse-voting
          - git clone https://github.com/discourse/discourse-translator
          - git clone https://github.com/angusmcleod/discourse-elections
          - git clone https://github.com/discourse/discourse-styleguide
          - git clone https://github.com/Ahmedgagan/discourse-custom-trust-level
          - git clone https://github.com/paviliondev/discourse-quick-messages
          - git clone https://github.com/paviliondev/discourse-locations
          - git clone https://github.com/discourse/discourse-calendar

  # Armazenamento de objetos
  after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - su discourse -c 'bundle exec rake s3:upload_assets'

## Quaisquer comandos personalizados para executar após a construção
run:
  - exec: echo "Início dos comandos personalizados"
  ## Se você quiser definir o endereço de e-mail 'De' para seu primeiro registro, descomente e altere:
  ## Após receber o primeiro e-mail de inscrição, recomente a linha. Ela precisa ser executada apenas uma vez.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fim dos comandos personalizados"

Ok… a primeira coisa que recomendo aqui é reconstruir isso sem nenhum plugin de terceiros. Mantenha apenas os que são /discourse/discourse.

Se isso funcionar, você pode fazer um bisect para descobrir qual plugin está causando o problema.

Bem, o plugin docker_manage não é um caminho discourse/discourse, mas com ele desabilitado, a página ...admin/upgrade não existe.

Habilitar apenas o plugin docker_manage resulta na mesma página de atualizações em branco.

1 curtida

GitHub - discourse/docker_manager: Plugin for use with discourse docker image · GitHub ?

Desculpe, você está certo, devo ter alucinado. Esqueça, está no caminho discourse/.

Mas de qualquer forma, ainda há uma tela branca em branco.

Com a disponibilidade da versão 2.6.0.beta5 (estou na 2.6.0.beta4), ainda estou enfrentando uma página de atualizações em branco. Agradeceria por qualquer orientação adicional, já que tentei desativar os plugins sem sucesso.

Dê uma olhada nas Ferramentas de Desenvolvedor do Chrome. Há algum erro no console quando a página fica branca? Minha suspeita é que isso tenha a ver com sua CSP.

1 curtida

Obrigado, você tem razão — ele está se recusando a carregar um script vindo do meu CDN. Com as URLs sanitizadas:

upgrade:1 Recusa em carregar o script 'https://cdn-to-discourse.b-cdn.net/assets/docker-manager-app-32418f2f7cd50e6f4a0b8d13badc4e59f6a1ad74e7bed270f3a051478fed773d.js' porque viola a seguinte diretiva de Política de Segurança de Conteúdo: "script-src https://forum.example.com/logs/ https://forum.example.com/sidekiq/ https://forum.example.com/mini-profiler-resources/ https://cdn-to-s3.b-cdn.net/assets/ https://cdn-to-s3.b-cdn.net/brotli_asset/ https://forum.example.com/extra-locales/ https://cdn-to-discourse.b-cdn.net/highlight-js/ https://cdn-to-discourse.b-cdn.net/javascripts/ https://cdn-to-discourse.b-cdn.net/plugins/ https://cdn-to-discourse.b-cdn.net/theme-javascripts/ https://cdn-to-discourse.b-cdn.net/svg-sprite/ https://matomo.example.com". Note que 'script-src-elem' não foi definido explicitamente, então 'script-src' é usado como fallback.

A página de configurações de Segurança diz que “O host atual e o CDN estão incluídos por padrão.” Devo adicionar manualmente o CDN à lista de permissões mesmo assim?

Vejo que um problema idêntico foi levantado aqui, sem uma resposta definitiva sobre por que a whitelist padrão não estava funcionando.

1 curtida

Olá,

Acho que você deve adicionar esta URL à configuração de CSP do administrador (content security policy script src):

https://cdn-to-discourse.b-cdn.net/assets/

E depois verifique novamente os erros nas Ferramentas de Desenvolvedor do Chrome.

Sim, isso funciona. Mas fico curioso sobre por que a whitelist padrão não faz isso automaticamente.

Eu também estou curioso. Como sua CDN está configurada? Podemos estar perdendo alguma funcionalidade mágica do plugin docker-manager.

cc @pmusaraj

4 curtidas

Sim, de fato, estávamos. O plugin docker_manager estava carregando dois arquivos JS em um template usando javascript_include_tag, que não reconhece DISCOURSE_S3_CDN_URL, então estava usando o padrão DISCOURSE_CDN_URL e causando problemas no CSP.

Deveria estar corrigido agora via FIX: blank upgrade page when using S3 CDN and CSP · discourse/docker_manager@3d37fd6 · GitHub

@paulrudy, se você atualizar o plugin docker_manager, não deverá mais precisar adicionar manualmente https://cdn-to-discourse.b-cdn.net/assets/ ao seu CSP.

6 curtidas

Isso resolveu! Obrigado @sam e @pmusaraj

4 curtidas