Migrate_from_s3: Sie müssen S3-Uploads deaktivieren, bevor Sie diese Aufgabe ausführen

Ich versuche, alle Daten von S3 zurück auf meinen Server zu migrieren. Allerdings liefert rake uploads:migrate_from_s3 den Fehler You must disable S3 uploads before running that task. Ich habe daher die Option enable s3 uploads in meinen Discourse-Einstellungen deaktiviert und zusätzlich DISCOURSE_USE_S3: false in meine app.yml-Datei aufgenommen. Trotzdem ohne Erfolg – derselbe Fehler.

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

Ich bin verwirrt. Wie kann ich es deaktivieren?

Enthält deine app.yml S3-Umgebungsvariablen? Möglicherweise musst du diese prüfen, um S3-Uploads zu deaktivieren.

Was ist eine S3-Umgebungsvariable? In meinem Fall wird DISCOURSE_USE_S3 unter env gespeichert.

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

  UNICORN_WORKERS: 2

  ## TODO: Der Domainname, auf den diese Discourse-Instanz antworten wird
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Kommentieren Sie dies aus, wenn Sie möchten, dass der Container mit demselben
  ## Hostnamen (-h-Option) wie oben angegeben gestartet wird (Standard: "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Durch Kommas getrennte Liste von E-Mail-Adressen, die bei der ersten Anmeldung zu Administratoren und Entwicklern werden
  ## Beispiel: 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  #S3-Konfiguration
  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

… und vergiss nicht, @Pravi, dass du deinen Container (App) neu bauen musst, nachdem du die meisten Variablen in deiner yml-Datei geändert hast; einige Änderungen können durch das Stoppen und Starten deines Containers wirksam werden, aber im Zweifel baue den Container (App) nach jeder Änderung an deiner yml-Datei neu.

Ich baue den Container nach jeder Änderung in der app.yml-Datei neu. Trotzdem ist er deaktiviert.

Versuch es mal, den Backup-Speicherort auf lokal zu ändern?
Ich bin mir nicht sicher, ob das hilft, aber es ist meine beste Option.

Ich habe ‘local’ als Sicherungsspeicherort hinzugefügt, den Container neu erstellt und den Migrationsversuch gestartet, aber leider ohne Erfolg. Es erscheint die Meldung: Sie müssen S3-Uploads deaktivieren, bevor Sie diese Aufgabe ausführen.

Es tut mir leid, ich weiß nicht, was dies verursachen könnte.

Nachdem Sie mit DISCOURSE_USE_S3=false in der YAML-Datei neu erstellt und den Rake-Auftrag ausgeführt haben, heißt es immer noch: „Sie müssen S3-Uploads deaktivieren“? Haben Sie auch im Admin-Bereich S3 deaktiviert?

Aktuell ist die Ausgabe von:

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

Die Logik für GlobalSetting.use_s3? verwendet die Umgebung nicht auf die gleiche Weise – sie nutzt:

  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

Ich verstehe, dass dies verwirrend sein könnte – ich werde jemanden damit beauftragen, sich das anzusehen.

Für den Moment sollte das Zurücksetzen von DISCOURSE_USE_S3 in der Umgebung und DISCOURSE_S3_BUCKET es Ihnen ermöglichen, von S3 zu migrieren.

Das ist, was ich erhalte,

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

Ja, ich habe DISCOURSE_USE_S3=false in die app.yml hinzugefügt, dann den Container neu erstellt und den Rake-Auftrag ausgeführt, aber es wird immer noch die gleiche Ausgabe angezeigt. Ja, ich habe den Upload auf der Admin-Seite deaktiviert.

Wie hier erwähnt, solltest du auch DISCOURSE_S3_BUCKET in der yml-Datei zurücksetzen. Vermutlich reicht es, ein # davor zu setzen.

Im Moment baue ich den Container neu auf. Ich werde das Ergebnis in ein paar Minuten berichten.

Ich verstehe nicht, wie das letzte Ergebnis wahr sein kann, wenn du die Umgebungsvariable auf false gesetzt und neu aufgebaut hast. Die SiteSetting-Einträge stammen aus deinem Admin-Bereich, während GlobalSettings über die app.yml konfiguriert wird.

Die SiteSetting in meinem Admin-Bereich ist deaktiviert.

s3

S3-Konfiguration

  #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

Das Deaktivieren von DISCOURSE_USE_S3 und DISCOURSE_S3_BUCKET führt bei mir zu diesem Fehler:

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migration der Uploads von S3 zu lokalem Speicher für 'default'...
rake abgebrochen!
NoMethodError: undefinierte Methode `downcase' für 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>'
Aufgaben: TOP => uploads:migrate_from_s3
(Siehe vollständigen Aufruf, indem Sie die Aufgabe mit --trace ausführen)

Update:

Vor dem Deaktivieren von DISCOURSE_USE_S3 und 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)> 

Nach dem Deaktivieren von DISCOURSE_USE_S3 und 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)>

Hallo @Pravi,

Ja, ich wollte gerade vorschlagen, dass du alle diese Umgebungsvariablen auskommentierst und dies versuchst:

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 

Aber dann habe ich dein neuestes Update gelesen (danke für die Details) und es scheint, als würdest du Fortschritte machen.

Glückwunsch zu den Fortschritten. Gut gemacht!

Das habe ich auch versucht. Ich habe alles außer DISCOURSE_USE_S3: false auskommentiert, und derselbe Fehler wie zuvor taucht auf.

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrating uploads from S3 to local storage for 'default'...
rake aborted!
NoMethodError: undefined method `downcase' for 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
(See full trace by running task with --trace)

Die SiteSetting und GlobalSettings sind deaktiviert.

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

Danke, aber ich bin mir nicht sicher, ob ich wirklich Fortschritte gemacht habe. Jetzt muss ich mich mit diesem neuen Fehler auseinandersetzen.

Weiß jemand, wie man dieses Problem löst?