Migrer_de_s3 : Vous devez désactiver les téléchargements S3 avant d'exécuter cette tâche

J’essaie de migrer toutes les données de S3 vers mon serveur. Cependant, rake uploads:migrate_from_s3 renvoie l’erreur « Vous devez désactiver les uploads S3 avant d’exécuter cette tâche ». J’ai donc décoché l’option activer les uploads S3 dans les paramètres de Discourse et ajouté DISCOURSE_USE_S3: false dans mon fichier app.yml. Mais toujours rien, la même erreur.

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

Je suis confus. Comment le désactiver ?

1 « J'aime »

Votre fichier app.yml contient-il des variables d’environnement S3 ? Vous devrez peut-être les vérifier pour désactiver les téléchargements S3.

Qu’est-ce qu’une variable d’environnement S3 ? Dans mon cas, DISCOURSE_USE_S3 est conservé dans l’environnement.

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

  UNICORN_WORKERS: 2

  ## TODO : Nom de domaine auquel cette instance Discourse répondra
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Décommentez si vous souhaitez que le conteneur soit démarré avec le même
  ## nom d'hôte (option -h) que spécifié ci-dessus (par défaut "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO : Liste d'adresses e-mail séparées par des virgules qui seront définies comme administrateur et développeur
  ## lors de l'inscription initiale, par exemple 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  # Configuration 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
1 « J'aime »

… et n’oubliez pas @Pravi que vous devez reconstruire votre conteneur (application) après avoir modifié la plupart des variables dans votre fichier yml ; certaines peuvent changer en arrêtant et en redémarrant votre conteneur, mais en cas de doute, reconstruisez le conteneur (application) après avoir apporté une modification à votre yml.

Je reconstruis le conteneur après chaque modification du fichier app.yml. Pourtant, il est désactivé.

Essayez de changer l’emplacement de la sauvegarde en local ?
Je ne sais pas si cela aidera, mais c’est ma meilleure option.

J’ai ajouté local à l’emplacement de sauvegarde, puis reconstruit le conteneur et tenté la migration, mais toujours sans succès. Cela me dit : Vous devez désactiver les téléchargements S3 avant d’exécuter cette tâche.

Je suis désolé, je ne sais pas ce qui peut causer cela.

Après avoir reconstruit avec DISCOURSE_USE_S3=false dans le fichier yml, avez-vous exécuté la tâche rake et cela indique-t-il toujours « Vous devez désactiver les téléchargements S3 » ? Avez-vous également désactivé S3 dans votre panneau d’administration ?

Pour l’instant, quel est le résultat de :

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

La logique de GlobalSetting.use_s3? n’utilise pas l’environnement de la même manière — elle utilise :

  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

Je comprends que cela puisse prêter à confusion — je vais demander à quelqu’un d’examiner cela.

Pour l’instant, désactiver DISCOURSE_USE_S3 dans l’environnement et DISCOURSE_S3_BUCKET devrait vous permettre de migrer depuis S3.

2 « J'aime »

Voici ce que j’obtiens,

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

Oui, j’ai ajouté DISCOURSE_USE_S3=false dans app.yml, puis j’ai reconstruit le conteneur et exécuté la tâche rake, mais cela me donne toujours la même sortie. Oui, j’ai désactivé les téléchargements dans la page d’administration.

Comme indiqué ici, vous devriez également désactiver DISCOURSE_S3_BUCKET dans le fichier yml. Probablement en ajoutant simplement un # devant.

Pour le moment, je reconstruis le conteneur. Je vous ferai un retour dans quelques minutes.

Je ne comprends pas comment ce dernier peut être vrai si vous avez défini la variable d’environnement à false et reconstruit. Les paramètres SiteSetting proviennent de votre panneau d’administration, tandis que GlobalSettings est configuré via app.yml.

Le paramètre du site dans mon panneau d’administration est désactivé.

s3

Configuration 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

La désactivation de DISCOURSE_USE_S3 et DISCOURSE_S3_BUCKET me donne cette erreur :

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migration des fichiers depuis S3 vers le stockage local pour '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
(Voir la trace complète en exécutant la tâche avec --trace)

Mise à jour :

Avant la désactivation de DISCOURSE_USE_S3 et 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)> 

Après la désactivation de DISCOURSE_USE_S3 et 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)>
1 « J'aime »

Bonjour @Pravi,

Oui, j’allais justement vous suggérer de commenter toutes ces variables d’environnement et d’essayer ceci :

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 

Mais ensuite, j’ai lu votre dernière mise à jour (merci pour les détails) et il semble que vous fassiez des progrès.

Félicitations pour ces avancées. Bon travail !

J’ai aussi essayé cela. J’ai commenté tout sauf DISCOURSE_USE_S3: false, mais la même erreur que précédemment réapparaît.

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)

Les paramètres SiteSetting et GlobalSettings sont désactivés.

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

Merci, mais je ne suis pas sûr d’avoir vraiment progressé. Maintenant, je dois gérer cette nouvelle erreur.

Quelqu’un sait comment résoudre ce problème ?