Atualização de 3.0.0.beta16 para 3.1.0.beta2

Fiz um backup e ele falhou.

Tentei fazer um upgrade.

No início, a tela de upgrade tinha tudo desabilitado. Reiniciei e então pude selecionar o upgrade do docker_manager. Isso falhou com:

rake aborted!
NoMethodError: undefined method `path' for nil:NilClass

Então, optei por acessar o servidor via SSH e tentei uma reconstrução e eis o que obtive:

root@Discourse-1:/var/discourse# ./launcher rebuild app
x86_64 arch detected.
WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
............
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2023-03-10T03:08:58.958320 #1]  INFO -- : Terminating async processes
I, [2023-03-10T03:08:58.958649 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 42
I, [2023-03-10T03:08:58.958745 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 103
103:signal-handler (1678417738) Received SIGTERM scheduling shutdown...
2023-03-10 03:08:58.959 UTC [42] LOG:  received fast shutdown request
2023-03-10 03:08:58.966 UTC [42] LOG:  aborting any active transactions
2023-03-10 03:08:58.969 UTC [42] LOG:  background worker "logical replication launcher" (PID 51) exited with exit code 1
2023-03-10 03:08:58.971 UTC [46] LOG:  shutting down
103:M 10 Mar 2023 03:08:59.047 # User requested shutdown...
103:M 10 Mar 2023 03:08:59.047 * Saving the final RDB snapshot before exiting.
2023-03-10 03:08:59.060 UTC [42] LOG:  database system is shut down
103:M 10 Mar 2023 03:08:59.073 * DB saved on disk
103:M 10 Mar 2023 03:08:59.073 # Redis is now ready to exit, bye bye...


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 1004 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
e956a73644feb880e4b524bcbd4fa3c626fcfcc4edb3752f72e523194f663b4e
root@Discourse-1:/var/discourse# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
root@Discourse-1:/var/discourse# 

Você tem algum plugin em seu app.yml?
Quando esse tipo de coisa acontece comigo, geralmente é um plugin corrompido que precisa ser comentado antes que a reconstrução funcione.

1 curtida

Quanta memória você tem? Tente reiniciar sua máquina e reconstruir novamente.

1 curtida

O que free te diz?

Pessoalmente, se um backup falhou, eu não tentaria uma atualização. Um backup - incluindo ter uma cópia baixada - é um pré-requisito para mim. Isso pode não ser um comentário útil neste momento, mas acho que tem que ser dito.

3 curtidas

Na sua outra postagem, você fornece um pouco mais de informação sobre o rake aborted:

2 curtidas

Esse não é o problema. Isso parece indicar que não há uma chave para baixar o banco de dados max mind. O problema está acima.

1 curtida

Se o problema for uma falha ao iniciar, então não nos importamos apenas com o uso de RAM e swap, mas também com a configuração do kernel. Se isso aparecer nos logs

# WARNING overcommit_memory está definido como 0! O salvamento em segundo plano pode falhar em condições de pouca memória. Para corrigir este problema, adicione 'vm.overcommit_memory = 1' a /etc/sysctl.conf e, em seguida, reinicie ou execute o comando 'sysctl vm.overcommit_memory=1' para que isso tenha efeito.

então vale a pena fazer como aconselhado. Veja também

Minha instalação do Discourse é muito genérica. Após uma reinicialização, obtive um backup limpo. Então, acabei decidindo fazer uma instalação do zero. A instalação falhou com os mesmos erros que postei acima. Tenho executado o Discourse com 6 GB de memória em um contêiner LXD nos últimos quatro anos sem problemas. A utilização de memória está estável em 1,9 GB. Durante uma atualização, a memória atinge o pico de 5,1 GB. Meu backup do banco de dados tem apenas 30 GB de dados, então minha instalação é pequena em comparação com outras. Minha configuração está rodando no Ubuntu 22.04. Devo usar outra distribuição?

1 curtida

Tenho talvez 40 usuários e 150 posts. O sistema usa 1,8 GB de memória e eu dei a ele 6 GB de memória. Quanta memória é necessária para que uma reconstrução funcione? Isso sempre foi adequado no passado.

Eu não uso nenhum plugin.

Você pode compartilhar seu arquivo app.yml? Receio que você tenha uma chave de API inválida para o MaxMind.

1 curtida

Aqui está o meu app.yml.

## este é o modelo de contêiner Docker Discourse autônomo e tudo-em-um
##
## 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 desejar adicionar Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.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,
## veja 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 um máximo de 25% da memória total.
  ## será definido automaticamente pelo bootstrap com base na RAM detectada, ou você pode substituir
  db_shared_buffers: "4096MB"

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

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

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

  ## Quantas requisições web concorrentes 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 substituir
  UNICORN_WORKERS: 8

  ## TODO: O nome de domínio que esta instância do Discourse responderá
  ## Obrigatório. O Discourse não funcionará com um número IP simples.
  DISCOURSE_HOSTNAME: discussion.scottibyte.com

  ## Descomente se você 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 se tornarão administradores e desenvolvedores
  ## na inscrição inicial, exemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'aaaaaa@gmail.com'

  ## 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.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: redacted
  DISCOURSE_SMTP_PASSWORD: redacted
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, padrão true)
  DISCOURSE_SMTP_DOMAIN: discussion.scottibyte.com
  DISCOURSE_NOTIFICATION_EMAIL: noreply@scottibyte.com

  ## Se você adicionou o template Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## O endereço CDN http ou https para esta instância do Discourse (configurado para puxar)
  ## veja https://meta.discourse.org/t/14857 para detalhes
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com
  
  ## A chave de endereço IP do MaxMind para consulta de endereço IP de geolocalização
  ## veja https://meta.discourse.org/t/-/137387/23 para detalhes
  DISCOURSE_MAXMIND_LICENSE_KEY: aaaaaaaa

## 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
## veja 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

## 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 o seu primeiro registro, descomente e altere:
  ## Após receber o primeiro e-mail de inscrição, comente a linha novamente. Ela só precisa ser executada uma vez.
  # - exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Fim dos comandos personalizados"

Ao fazer uma nova compilação, tentei uma nova chave Maxmind e recebi o mesmo erro.

Exclua ou comente a linha com DISCOURSE_MAXMIND_LICENSE_KEY e reconstrua.

1 curtida

Ah, e se ajudar. Tudo está funcionando bem agora. As atualizações são o que estão quebrando.

Comentei a chave Maxmind no YAML. A reconstrução está em andamento. Aliás, as notificações por e-mail sempre funcionaram bem. Ultimamente, o e-mail com o link de download de backup não funciona mais. Eu simplesmente vou até a pasta e baixo o backup via sftp e isso funciona e o log de backup é concluído com sucesso. Então, qual você acha que é o problema com a chave Maxmind?

@Falco Bem, aparentemente a chave Maxmind foi a culpada.


Como você pode ver, a reconstrução funcionou e o fórum está na versão mais recente. Fazer um novo backup funcionou a partir da GUI, assim como a notificação de backup e até mesmo o link de download de backup. Tudo funciona bem.
Obrigado, você é o mestre! Ótimos comentários e maravilhosa ajuda, senhor.

Então, mesmo com uma nova chave Maxmind, não tive sorte. Algum conselho sobre isso?

3 curtidas

Então uma chave inválida quebrará a compilação, mas uma chave nula não quebrará?

2 curtidas

Idealmente, nenhum dos dois, apenas preciso de confirmação do que exatamente está quebrado com os passos de reprodução adequados para que possamos registrar um bug e designar um engenheiro para corrigi-lo.

2 curtidas

Tudo o que fiz foi comentar a chave e a reconstrução funcionou perfeitamente. Com uma chave válida (e até mesmo uma nova chave), a compilação falha com os logs que forneci.

1 curtida