Desde a semana passada, todos os plugins, tanto os principais quanto os instalados, pararam de funcionar, mesmo quando ativados em nosso fórum. Inicialmente, pensei que isso estivesse relacionado ao bug mencionado anteriormente: FIX: Compile missing rollup plugin bundles on demand in development - #8, mas executamos várias atualizações desde então e nada resolveu. Tentei ativar um plugin anteriormente não utilizado, o “User Notes” pré-instalado, e não há opções para adicionar notas a nenhum usuário. Até o gerenciador Docker parou, de modo que todas as atualizações precisam ser executadas no nível do servidor, permitindo que apenas uma pessoa as aplique, em vez de toda a equipe de administradores.
Tentei pesquisar uma solução para isso, mas tudo que encontrei foi algo como “plugin desativado automaticamente” ou algo semelhante, nada tão específico quanto este caso.
Alguém poderia, por favor, sugerir possíveis soluções ou caminhos que devêssemos explorar, pois estamos tentando evitar um rollback, mas até agora parece que pode ser a última opção.
Obrigado, como sempre, a todos aqui e pelo suporte contínuo
Ativei meu plugin de ignorar CORS e os scripts foram carregados com sucesso, mas não vejo nenhuma mudança visível dos plugins. Recomendo tentar isso e, se funcionar, você deve descobrir o que está causando o erro no seu CDN.
Obrigado, Jay. Temos o Bunny e a correção que você mencionou resolveu todos os problemas agora! Obrigado a todos pela ajuda e suporte nisso. Nosso fórum voltou ao normal. Bem, tão normal quanto possível
No novo sistema de plugins, usamos script type="module", que exige que os cabeçalhos CORS corretos estejam configurados. Scripts no estilo antigo script type="text/javascript" não exigem esses cabeçalhos.
Temos migrado gradualmente diferentes sistemas para type="module" ao longo dos últimos anos. Temas já o utilizavam, assim como o highlightjs (que foi o mencionado no outro tópico). A carga de fontes a partir do CDN também tem o requisito de CORS.
Portanto, provavelmente havia outras coisas sutilmente quebradas, mesmo antes das mudanças recentes no sistema de plugins. Agora que você configurou o CORS, tudo deve voltar a funcionar
Só um aviso para todos: se você estiver usando o Azure Classic CDN, esse problema começou a ocorrer. Estou testando uma correção no lado do CDN, mas pode ser necessário migrar para o Front Door adequado em vez do Classic CDN.
@pfaffman@TomoftheFog@tanya_byrne@denvergeeks, poderiam confirmar como seus ativos estão configurados? Vocês têm apenas um CDN + o servidor de aplicação? Ou também armazenam ativos no S3 ou em armazenamento compatível com S3?
Se estiverem usando S3 ou armazenamento compatível com S3, infelizmente a única maneira confiável é adicionar alguma configuração específica do CDN. Eu assumi que este tópico era sobre ativos do S3, mas agora não tenho tanta certeza.
Para quem usa um CDN simples contra o servidor de aplicação, não deveria ter sido necessário nenhum trabalho extra de configuração. Deveria “funcionar automaticamente”, exatamente da mesma forma que os bundles de theme-javascripts e hightlightjs. Mas parece que realmente estávamos faltando o cabeçalho na nossa configuração padrão do NGINX. Desculpem por isso!
Isso deve fazer as coisas voltarem a funcionar:
Depois que isso for mesclado, será necessário executar um ./launcher rebuild app para que entre em vigor. Alterações na configuração do NGINX não são aplicadas durante atualizações da interface.
Peço desculpas pelo transtorno! Deveríamos ter realizado testes mais extensivos com diferentes configurações de CDN. Por favor, nos avise se ainda estiver enfrentando problemas após a reconstrução.
Todos os sites que conheço que apresentam o problema estão no S3. Alguns CDNs já tinham JS na lista e outros não. Não sei por que isso possa ser; talvez as configurações padrão tenham mudado ao longo dos anos?
Estava tendo dificuldade para fazer as configurações CORS no Cloudflare R2 funcionarem com um domínio personalizado. Acabei resolvendo à força bruta usando uma regra de transformação de cabeçalho para sempre inserir o cabeçalho correto para o meu domínio de CDN. Só para caso isso ajude alguém mais.
Também encontramos outro problema desde que nos deparamos com essa questão: alguns usuários não conseguem ver as imagens de avatar ao usar o botão de Markdown Texto Pré-formatado. Ele tenta carregar o highlight-js e gera um erro, informando que a falha foi no CORS:
Assumo que f.insertcred.it seja seu CDN S3? O HighlightJS deve ser carregado a partir do ‘CDN do aplicativo’, e não do CDN S3, então isso é um problema surpreendente. Pelo que sei, nada relacionado ao HighlightJS mudou nos últimos meses.
Você tem um CDN de aplicativo? Ou apenas S3 + CDN S3?
Recebi uma atualização do administrador principal do fórum:
Até onde sei, não temos um aplicativo CDN. Não descomentamos o DISCOURSE_CDN_URL no app.yml.
Usamos apenas as variáveis do S3, como DISCOURSE_S3_ENDPOINT e DISCOURSE_S3_CDN_URL, etc.
Aqui está nosso app.yml com informações sensíveis removidas
## este é o modelo de contêiner Docker Discourse tudo-em-um, independente
##
## 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 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"
## Descomente a próxima linha para habilitar o listener IPv6
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomente essas duas linhas se quiser adicionar o Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
## quais portas TCP/IP este contêiner deve expor?
## Se 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: "256MB"
## 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
## Tamanho máximo de upload (padrão: 10m)
upload_size: 20m
env:
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
LANGUAGE: 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: 4
## 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: forums.insertcredit.com
## 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 separados por vírgula que serão definidos como administradores e desenvolvedores
## no cadastro inicial, exemplo 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'EMAIL'
## 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: USERNAME
DISCOURSE_SMTP_PASSWORD: "PASSWORD"
DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true)
DISCOURSE_SMTP_DOMAIN: forums.insertcredit.com
DISCOURSE_NOTIFICATION_EMAIL: noreply@forum.insertcred.it
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: nyc3
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: ACCESS_KEY_VALYE
DISCOURSE_S3_CDN_URL: https://f.insertcred.it
DISCOURSE_S3_BUCKET: insertcredit-forum
DISCOURSE_S3_BACKUP_BUCKET: insertcredit-forum-backup
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false
DISCOURSE_CAN_PERMANENTLY_DELETE: true
## Se você adicionou o modelo Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: EMAIL
## 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
## A chave de endereço IP do maxmind geolocation para pesquisa de endereço IP
## consulte https://meta.discourse.org/t/-/137387/23 para detalhes
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## 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-bbcode-color.git
- git clone https://github.com/discourse/discourse-signatures.git
- git clone https://github.com/discourse/discourse-chart.git
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
## Quaisquer comandos personalizados para executar após a construção
run:
- exec: echo "Início dos comandos personalizados"
## Se quiser definir o endereço de e-mail 'De' para seu primeiro registro, descomente e altere:
## Após receber o primeiro e-mail de cadastro, recomente a linha. Ela só precisa ser executada uma vez.
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
- exec: echo "Fim dos comandos personalizados"
Espero que isso seja de alguma ajuda em relação à solicitação. Um ponto a observar é que não recebemos relatos sobre os problemas de avatares desaparecendo que tivemos alguns dias atrás. Até onde sei, nada foi alterado, então não temos certeza se o problema era apenas um pequeno grupo de usuários e, desde que o problema anterior foi resolvido, ele se resolveu sozinho ao longo do tempo.