Échec de la mise à niveau de 2.3.2 vers 2.3.6 en raison du plugin assign de Discourse

Lorsque j’essaie de passer de la version 2.3.2 à la 2.3.6, je rencontre cette erreur :

I, [2019-12-02T07:43:47.773465 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
ArgumentError: Version de migration inconnue « 6.0 » ; une version parmi « 4.2 », « 5.0 », « 5.1 », « 5.2 » était attendue
/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)>'
.......................................

Si je désactive le plugin discourse-assign, tout fonctionne correctement…
Mais ! Un mois plus tard, j’ai mis à niveau un autre forum Discourse de la version 2.3.2 à la 2.3.6, et tout s’est bien passé…
Qu’est-ce que je fais mal ?
J’ai essayé :

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

Comme vous l’avez diagnostiqué, le problème vient du plugin d’assignation de Discord. (Voulez-vous dire Discord assign ?)

Bien sûr ! Désolé ))) Je vais modifier…

Voici le coupable :
20191119174425_rename_site_setting_assign_emailer.rb

Contient :

# 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

Comment puis-je corriger cela ? Si je corrige directement dans ce fichier, le dépôt sera-t-il à nouveau téléchargé au démarrage de la reconstruction et mes modifications seront-elles effacées ?

Solution :

  1. Commentez le plugin discourse-assign dans app.yml
  2. Reconstruisez l’application avec ./launcher rebuild app
  3. Accédez au conteneur avec ./launcher enter app
  4. cd /var/www/discourse/plugins
  5. git clone https://github.com/discourse/discourse-assign.git
  6. Accédez à cd /var/www/discourse/plugins/discourse-assign/db/migrate
  7. Modifiez le fichier 20191119174425_rename_site_setting_assign_emailer.rb, remplacez ActiveRecord::Migration[6.0] par ActiveRecord::Migration[5.2]
  8. Enregistrez le fichier et quittez l’éditeur
  9. Accédez à cd /var/www/discourse
  10. Exécutez su discourse -c 'bundle exec rake db:migrate'
  11. Quittez le conteneur
  12. Décommentez le plugin discourse-assign dans app.yml
  13. Reconstruisez l’application À NOUVEAU avec ./launcher rebuild app
  14. TADAAA ! Tout fonctionne !

Je n’ai pas de mots adéquats pour décrire ce processus ! )))))))))

Merci d’avoir signalé le problème @nahimov, cela devrait maintenant être corrigé sans avoir besoin de la solution de contournement que vous avez décrite

cc @dan