Migra_da_s3: Devi disabilitare i caricamenti S3 prima di eseguire l'attività

Sto cercando di migrare tutti i dati da S3 al mio server. Tuttavia, rake uploads:migrate_from_s3 restituisce l’errore Devi disabilitare i caricamenti S3 prima di eseguire quel compito. Quindi ho deselezionato l’opzione enable s3 uploads nelle impostazioni di Discourse e ho anche aggiunto DISCOURSE_USE_S3: false al file app.yml. Ma ancora senza successo, lo stesso errore.

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

Sono confuso. Come posso disabilitarlo?

Il tuo file app.yml contiene le variabili d’ambiente per S3? Potresti doverle verificare per disabilitare i caricamenti su S3.

Cos’è una variabile d’ambiente S3? Nel mio caso, DISCOURSE_USE_S3 è mantenuta nell’ambiente.

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

  UNICORN_WORKERS: 2

  ## TODO: Il nome di dominio a cui risponderà questa istanza di Discourse
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Rimuovi il commento se desideri che il contenitore venga avviato con lo stesso
  ## nome di host (opzione -h) specificato sopra (predefinito "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Elenco di email separate da virgola che verranno rese amministratori e sviluppatori
  ## alla registrazione iniziale, ad esempio 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  # Configurazione 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 non dimenticare @Pravi che devi ricostruire il tuo container (app) dopo aver modificato la maggior parte delle variabili nel tuo file yml. Alcune potrebbero cambiare semplicemente fermando e riavviando il container, ma in caso di dubbio, ricostruisci sempre il container (app) dopo aver apportato una modifica al tuo file yml.

Ricostruisco il container dopo ogni modifica nel file app.yml. Tuttavia, è disattivato.

Prova a cambiare la posizione del backup in locale?
Non sono sicuro che possa aiutare, ma è la mia migliore possibilità.

Ho aggiunto la località locale alla posizione di backup, quindi ho ricompilato il contenitore e ho provato a eseguire la migrazione, ma senza successo. Mi sta restituendo Devi disabilitare i caricamenti S3 prima di eseguire quell’attività.

Mi dispiace, non so cosa possa causare questo.

Dopo aver ricompilato impostando DISCOURSE_USE_S3=false nel file YAML, hai eseguito il task Rake e ricevi ancora il messaggio “Devi disabilitare gli upload su S3”? Hai anche disabilitato S3 dal tuo pannello di amministrazione?

Al momento, qual è l’output di:

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

La logica per GlobalSetting.use_s3? non utilizza l’ambiente nello stesso modo: usa:

  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

Capisco come questo possa creare confusione: farò controllare la questione a qualcuno.

Per ora, rimuovere DISCOURSE_USE_S3 dall’ambiente e DISCOURSE_S3_BUCKET dovrebbe consentirti di migrare da S3.

Questo è quello che ottengo,

[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)>

Sì, ho aggiunto DISCOURSE_USE_S3=false a app.yml, poi ho ricompilato il container ed eseguito il task rake, ma ottengo ancora lo stesso output. Sì, ho disabilitato il caricamento nella pagina di amministrazione.

Come detto qui, dovresti anche deselezionare DISCOURSE_S3_BUCKET nel file yml. Probabilmente basta inserire un # davanti.

Al momento sto ricostruendo il contenitore. Relazionerò sull’esito tra qualche minuto.

Non capisco come l’ultima possa essere true se hai impostato la variabile d’ambiente su false e hai ricostruito. Le impostazioni di SiteSetting provengono dal tuo pannello di amministrazione, mentre GlobalSettings è gestito tramite app.yml.

La SiteSetting nel mio pannello di amministrazione è disabilitata.

s3

Configurazione 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

Disimpostando DISCOURSE_USE_S3 e DISCOURSE_S3_BUCKET ottengo questo errore,

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrazione degli upload da S3 a archiviazione locale per 'default'...
rake aborted!
NoMethodError: metodo `downcase` non definito per 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
(Vedi traccia completa eseguendo il task con --trace)

Aggiornamento:

Prima di disimpostare 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)> 

Dopo aver disimpostato 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)>

Ciao @Pravi

Sì, stavo proprio per suggerire di commentare tutte queste variabili d’ambiente e provare quanto segue:

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 

Poi ho letto il tuo ultimo aggiornamento (grazie per i dettagli) e sembra che tu stia facendo progressi.

Congratulazioni per i progressi fatti. Ottimo lavoro!

Ho provato anch’io. Ho commentato tutto tranne DISCOURSE_USE_S3: false, ma appare lo stesso errore di prima.

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrazione dei file caricati da S3 a archiviazione locale per 'default'...
rake aborted!
NoMethodError: metodo 'downcase' non definito per 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
(Vedi traccia completa eseguendo il task con --trace)

SiteSetting e GlobalSettings sono disabilitati.

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)> 

Grazie, ma non sono sicuro di aver fatto progressi. Ora devo gestire questo nuovo errore.

Qualcuno sa come risolvere questo problema?