Migrar_de_s3: Você deve desabilitar uploads do S3 antes de executar essa tarefa

Estou tentando migrar todos os dados do S3 de volta para o meu servidor. No entanto, rake uploads:migrate_from_s3 retorna o erro Você deve desabilitar os uploads do S3 antes de executar essa tarefa. Então, desmarquei a opção habilitar uploads S3 nas configurações do Discourse e também adicionei DISCOURSE_USE_S3: false ao arquivo app.yml. Mesmo assim, sem sucesso, o mesmo erro persiste.

[1] pry(main)> SiteSetting.enable_s3_uploads
=> false
[2] pry(main)> GlobalSetting.use_s3
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true

Estou confuso. Como desabilitar isso?

Seu app.yml contém variáveis de ambiente do S3? Talvez você precise verificá-las para desativar os uploads para o S3.

O que é uma variável de ambiente S3? No meu caso, DISCOURSE_USE_S3 é mantido no ambiente.

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

  UNICORN_WORKERS: 2

  ## TODO: O nome de domínio ao qual esta instância do Discourse responderá
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Descomente se quiser que o contêiner seja iniciado com o mesmo
  ## nome de host (opção -h) 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 'usuario1@exemplo.com,usuario2@exemplo.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  # Configuração do S3
  DISCOURSE_USE_S3: false
  DISCOURSE_S3_REGION: ap-south-1
  DISCOURSE_S3_ACCESS_KEY_ID: AKxxxxxxxxxxxxxxxxxxxxxDQ
  DISCOURSE_S3_SECRET_ACCESS_KEY: QWVxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLigGs
  DISCOURSE_S3_BUCKET: enginxxxxxxxxxxket
  DISCOURSE_S3_BACKUP_BUCKET: enginxxxxxxxxxxxxcket
  DISCOURSE_BACKUP_LOCATION: s3

… e não se esqueça, @Pravi, de que você deve reconstruir seu contêiner (aplicação) após alterar a maioria das variáveis no seu arquivo yml. Algumas podem ser atualizadas apenas parando e iniciando o contêiner; mas na dúvida, reconstrua o contêiner (aplicação) sempre que fizer uma alteração no seu yml.

Reconstruo o container após cada alteração no arquivo app.yml. Ainda assim, ele permanece desativado.

Tente alterar o local do backup para local?
Não tenho certeza se ajudaria, mas é minha melhor aposta.

Adicionei ‘local’ ao local de backup, depois recriei o container e tentei migrar, mas ainda não tive sorte. Está me dizendo: Você deve desativar os uploads para S3 antes de executar essa tarefa

Sinto muito, não sei o que pode estar causando isso.

Depois de reconstruir com DISCOURSE_USE_S3=false no arquivo yml, você executou a tarefa rake e ainda aparece a mensagem “Você deve desativar os uploads S3”? Você também foi ao painel de administração e desativou o S3 lá?

No momento, qual é a saída de:

SiteSetting.Upload.enable_s3_uploads
SiteSetting.enable_s3_uploads
GlobalSetting.use_s3?

A lógica para GlobalSetting.use_s3? não usa o ambiente da mesma forma — ela utiliza:

  def self.use_s3?
    (@use_s3 ||=
      begin
        s3_bucket &&
        s3_region && (
          s3_use_iam_profile || (s3_access_key_id && s3_secret_access_key)
        ) ? :true : :false
      end) == :true
  end

Vejo como isso pode ser confuso — vou pedir para alguém analisar.

Por enquanto, desmarcar DISCOURSE_USE_S3 no ambiente e DISCOURSE_S3_BUCKET deve permitir que você migre do S3.

Isso é o que eu recebo,

[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> true
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true
[4] pry(main)>

Sim, adicionei DISCOURSE_USE_S3=false ao app.yml, depois recriei o container e executei a tarefa rake, mas ainda assim estou recebendo a mesma saída. Sim, desabilitei o upload na página de administração.

Como dito aqui, você também deve desativar o DISCOURSE_S3_BUCKET no arquivo yml. Provavelmente basta colocar um # antes dele.

No momento, estou recriando o container. Relatarei o resultado em alguns minutos.

Não sei como o último pode ser verdadeiro se você definiu a variável de ambiente como falsa e fez o rebuild. As configurações do SiteSetting vêm do seu painel de administração, enquanto a GlobalSettings é definida através do app.yml.

A configuração do site no meu painel de administração está desativada.

s3

Configuração do S3

  #DISCOURSE_USE_S3: false
  DISCOURSE_S3_REGION: ap-south-1
  DISCOURSE_S3_ACCESS_KEY_ID: AKXXXXXXXXXXXXXXXDQ
  DISCOURSE_S3_SECRET_ACCESS_KEY: AvsvsxxxxxxxxxxxxxxxxvcccccccLigGs
  #DISCOURSE_S3_BUCKET: engineers-leakybucket
  DISCOURSE_S3_BACKUP_BUCKET: engineers-backupbucket
  DISCOURSE_BACKUP_LOCATION: s3
  #DISCOURSE_S3_CDN_URL: https://engineers-leakybucket.s3.dualstack.ap-south-1.amazonaws.com

Desativar DISCOURSE_USE_S3 e DISCOURSE_S3_BUCKET me gera este erro:

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrando uploads do S3 para armazenamento local para 'default'...
rake aborted!
NoMethodError: método `downcase` não definido para nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_from_s3
(Veja o rastreamento completo executando a tarefa com --trace)

Atualização:

Antes de desativar DISCOURSE_USE_S3 e DISCOURSE_S3_BUCKET:

[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> true
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> true
[4] pry(main)> 

Depois de desativar DISCOURSE_USE_S3 e DISCOURSE_S3_BUCKET:

[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> false
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> false
[4] pry(main)>

Olá @Pravi

Sim, eu estava prestes a sugerir agora mesmo que você comentasse todas essas variáveis de ambiente e tentasse o seguinte:

DISCOURSE_USE_S3: false
#DISCOURSE_S3_REGION: ap-south-1
#DISCOURSE_S3_ACCESS_KEY_ID: AKXXXXXXXXXXXXXXXDQ
#DISCOURSE_S3_SECRET_ACCESS_KEY: AvsvsxxxxxxxxxxxxxxxxvcccccccLigGs
##DISCOURSE_S3_BUCKET: engineers-leakybucket
#DISCOURSE_S3_BACKUP_BUCKET: engineers-backupbucket
#DISCOURSE_BACKUP_LOCATION: s3
#DISCOURSE_S3_CDN_URL: https://engineers-leakybucket.s3.dualstack.ap-south-1.amazonaws.com 

Mas então li sua última atualização (obrigado pelos detalhes) e parece que você está avançando.

Parabéns pelo progresso alcançado. Bom trabalho!

Eu também tentei isso. Comentei tudo, exceto DISCOURSE_USE_S3: false, e o mesmo erro anterior apareceu novamente.

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrando uploads do S3 para armazenamento local para 'default'...
rake aborted!
NoMethodError: método `downcase' não definido para nil:NilClass
/var/www/discourse/app/models/global_setting.rb:107:in `s3_bucket_name'
/var/www/discourse/app/models/site_setting.rb:157:in `absolute_base_url'
/var/www/discourse/lib/tasks/uploads.rake:138:in `migrate_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:118:in `block in migrate_all_from_s3'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:68:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.3.0/lib/rails_multisite/connection_management.rb:78:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:118:in `migrate_all_from_s3'
/var/www/discourse/lib/tasks/uploads.rake:93:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_from_s3
(Veja o rastreamento completo executando a tarefa com --trace)

O SiteSetting e o GlobalSettings estão desativados.

root@ip-172-31-7-247-app:/var/www/discourse# rails c
[1] pry(main)> SiteSetting.Upload.enable_s3_uploads
=> false
[2] pry(main)> SiteSetting.enable_s3_uploads
=> false
[3] pry(main)> GlobalSetting.use_s3?
=> false
[4] pry(main)> 

Obrigado, mas não tenho certeza de que fiz algum progresso. Agora tenho que lidar com esse novo erro.

Alguém sabe como resolver esse problema?