Aggiornamento fallito da 2.3.2 a 2.3.6 a causa del plugin assign di Discourse

Quando provo ad aggiornare dalla versione 2.3.2 alla 2.3.6, visualizzo questo errore:

I, [2019-12-02T07:43:47.773465 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
ArgumentError: Unknown migration version "6.0"; expected one of "4.2", "5.0", "5.1", "5.2"
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/migration/compatibility.rb:11:in `find'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/migration.rb:536:in `[]'
/var/www/discourse/plugins/discourse-assign/db/migrate/20191119174425_rename_site_setting_assign_emailer.rb:3:in `<top (required)>'
.......................................

Se disabilito il plugin discourse-assign, tutto funziona correttamente…
Ma! Un mese dopo ho aggiornato un altro forum Discourse dalla 2.3.2 alla 2.3.6 e l’aggiornamento è andato a buon fine…
Cosa sto sbagliando?
Ho provato:

cd /var/discourse
git pull
./launcher rebuild app

Come hai diagnosticato, il problema riguarda il plugin di assegnazione di Discord. (ti riferisci all’assegnazione di Discord?)

Certo! Scusa ))) lo modificherò…

Ecco il colpevole:
20191119174425_rename_site_setting_assign_emailer.rb

Contiene:

# frozen_string_literal: true

class RenameSiteSettingAssignEmailer < ActiveRecord::Migration[6.0]
  def up
    execute "UPDATE site_settings
             SET name = 'assign_mailer', value = '#{AssignMailer.levels[:always]}', data_type = #{SiteSettings::TypeSupervisor.types[:enum]}
             WHERE name = 'assign_mailer_enabled' AND value = 't' AND data_type = #{SiteSettings::TypeSupervisor.types[:enum]}"

    execute "UPDATE site_settings
             SET name = 'assign_mailer', value = '#{AssignMailer.levels[:never]}', data_type = #{SiteSettings::TypeSupervisor.types[:enum]}
             WHERE name = 'assign_mailer_enabled' AND value = 'f' AND data_type = #{SiteSettings::TypeSupervisor.types[:enum]}"
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

Come posso risolverlo? Se lo correggo direttamente in questo file, il repository verrà scaricato di nuovo all’avvio della ricostruzione e le mie modifiche verranno cancellate?

Soluzione:

  1. Commenta il plugin discourse-assign in app.yml
  2. Ricompila l’app con ./launcher rebuild app
  3. Entra nel container con ./launcher enter app
  4. cd /var/www/discourse/plugins
  5. git clone https://github.com/discourse/discourse-assign.git
  6. Vai in cd /var/www/discourse/plugins/discourse-assign/db/migrate
  7. Modifica il file 20191119174425_rename_site_setting_assign_emailer.rb, sostituisci ActiveRecord::Migration[6.0] con ActiveRecord::Migration[5.2]
  8. Salva il file ed esci dall’editor
  9. Vai in cd /var/www/discourse
  10. Esegui su discourse -c 'bundle exec rake db:migrate'
  11. Esci dal container
  12. Rimuovi il commento dal plugin discourse-assign in app.yml
  13. Ricompila l’app ANCORA con ./launcher rebuild app
  14. TA-DA-DA-TAM! Tutto funziona!

Non ho parole adeguate per descrivere questo processo! )))))))))

Grazie per aver segnalato il problema @nahimov, ora dovrebbe essere risolto senza bisogno dell’ workaround che hai descritto

cc @dan