Migrar_desde_s3: Debes deshabilitar las cargas de S3 antes de ejecutar esa tarea

Estoy intentando migrar todos los datos desde S3 de vuelta a mi servidor. Sin embargo, rake uploads:migrate_from_s3 devuelve el error Debes deshabilitar las subidas a S3 antes de ejecutar esa tarea. Así que desmarqué la opción habilitar subidas a S3 en la configuración de Discourse y también agregué DISCOURSE_USE_S3: false a mi archivo app.yml. Pero aún sin suerte, el mismo error.

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

Estoy confundido. ¿Cómo lo desactivo?

1 me gusta

¿Tu archivo app.yml contiene variables de entorno de S3? Es posible que debas revisarlas para desactivar las cargas a S3.

¿Qué es una variable de entorno S3? En mi caso, DISCOURSE_USE_S3 se mantiene en env.

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

  UNICORN_WORKERS: 2

  ## TODO: El nombre de dominio al que responderá esta instancia de Discourse
  DISCOURSE_HOSTNAME: engineersasylum.com

  ## Descomente si desea que el contenedor se inicie con el mismo
  ## nombre de host (opción -h) que se especifica arriba (predeterminado "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Lista de correos electrónicos separados por comas que se convertirán en administradores y desarrolladores
  ## en el registro inicial, ejemplo 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'praveen369gen@gmail.com'

  # Configuración de 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 me gusta

… y no olvides, @Pravi, que debes reconstruir tu contenedor (aplicación) después de cambiar la mayoría de las variables en tu archivo yml. Algunas podrían cambiar simplemente deteniendo y volviendo a iniciar tu contenedor, pero cuando dudes, reconstruye el contenedor (aplicación) después de realizar un cambio en tu yml.

Reconstruyo el contenedor después de cada cambio en el archivo app.yml. Aun así, está desactivado.

¿Intenta cambiar la ubicación de la copia de seguridad a local?
No estoy seguro de si ayudaría, pero es mi mejor opción.

Agregué ‘local’ como ubicación de respaldo, luego reconstruí el contenedor e intenté migrar, pero sin éxito. Me está mostrando Debes deshabilitar las cargas a S3 antes de ejecutar esa tarea.

Lo siento, no sé qué podría estar causando esto.

Después de reconstruir con DISCOURSE_USE_S3=false en el yml, ejecutaste la tarea rake y aún dice «Debes desactivar las cargas en S3». ¿Fuiste al panel de administración y desactivaste S3 allí también?

Por el momento, ¿cuál es el resultado de:

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

La lógica de GlobalSetting.use_s3? no utiliza el entorno de la misma manera; 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

Puedo ver cómo esto podría resultar confuso; pediré a alguien que lo revise.

Por ahora, desestablecer DISCOURSE_USE_S3 en el entorno y DISCOURSE_S3_BUCKET debería permitirte migrar desde S3.

2 Me gusta

Esto es lo que obtengo,

[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í, agregué DISCOURSE_USE_S3=false al app.yml, luego reconstruí el contenedor y ejecuté la tarea rake, pero sigue mostrando la misma salida. Sí, desactivé las cargas en la página de administración.

Como se dijo aquí, también debes desestablecer DISCOURSE_S3_BUCKET en el yml. Probablemente solo añada un # antes de él.

Ahora mismo, estoy reconstruyendo el contenedor. Informaré sobre el resultado en un par de minutos.

No entiendo cómo el último puede ser verdadero si configuraste la variable de entorno en falso y reconstruiste. Los de SiteSetting provienen de tu panel de administración y GlobalSettings se gestiona a través de app.yml.

La configuración del sitio en mi panel de administración está desactivada.

s3

Configuración de 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

Al desestablecer DISCOURSE_USE_S3 y DISCOURSE_S3_BUCKET, obtengo este error:

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrando archivos desde S3 a almacenamiento local para '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
(Ver el rastreo completo ejecutando la tarea con --trace)

Actualización:

Antes de desestablecer DISCOURSE_USE_S3 y 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)> 

Después de desestablecer DISCOURSE_USE_S3 y 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 me gusta

Hola @Pravi

Sí, iba a sugerir justo ahora que comentas todas estas variables de entorno e intentes lo siguiente:

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 

Pero luego leí tu última actualización (gracias por los detalles) y parece que estás avanzando.

¡Felicidades por el progreso logrado! Buen trabajo.

Yo también lo intenté. Comenté todo excepto DISCOURSE_USE_S3: false y aparece el mismo error que antes.

root@ip-172-31-7-247-app:/var/www/discourse# rake uploads:migrate_from_s3
Migrando las cargas desde S3 al almacenamiento local para 'default'...
rake aborted!
NoMethodError: el método `downcase` no está 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>'
Tareas: TOP => uploads:migrate_from_s3
(Véase el rastreo completo ejecutando la tarea con --trace)

Las configuraciones SiteSetting y GlobalSettings están deshabilitadas.

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

Gracias, pero no estoy seguro de haber avanzado. Ahora tengo que lidiar con este nuevo error.

¿Alguien sabe cómo solucionar este problema?