فشل الترقية من 2.3.2 إلى 2.3.6 بسبب إضافة discourse assign

عند محاولة الترقية من الإصدار 2.3.2 إلى 2.3.6، أواجه الخطأ التالي:

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

إذا قمت بتعطيل إضافة discourse-assign، فكل شيء يعمل بشكل صحيح…
لكن! بعد شهر، قمت بترقية منتدى discourse آخر من 2.3.2 إلى 2.3.6، ومرت العملية بنجاح…
ما الخطأ الذي أقوم به؟
جربت ما يلي:

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

كما استنتجت، المشكلة تكمن في إضافة تعيين ديسكورد. (هل تقصد ديسكورد assign؟)

بالطبع! عذراً ))) سأقوم بالتعديل…

إليك الملف المذنب:
20191119174425_rename_site_setting_assign_emailer.rb

يحتوي على:

# 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

كيف يمكنني إصلاح ذلك؟ إذا قمت بإصلاحه مباشرة في هذا الملف، هل سيتم تنزيل المستودع مرة أخرى عند بدء إعادة البناء وسيتم مسح تعديلاتي؟

الحل:

  1. قم بإلغاء التعليق عن إضافة discourse-assign في ملف app.yml
  2. أعد بناء التطبيق باستخدام الأمر ./launcher rebuild app
  3. ادخل إلى الحاوية باستخدام الأمر ./launcher enter app
  4. انتقل إلى المجلد cd /var/www/discourse/plugins
  5. انسخ المستودع باستخدام الأمر git clone https://github.com/discourse/discourse-assign.git
  6. انتقل إلى المجلد cd /var/www/discourse/plugins/discourse-assign/db/migrate
  7. عدّل الملف 20191119174425_rename_site_setting_assign_emailer.rb، واستبدل ActiveRecord::Migration[6.0] بـ ActiveRecord::Migration[5.2]
  8. احفظ الملف واخرج من المحرر
  9. انتقل إلى المجلد cd /var/www/discourse
  10. شغّل الأمر su discourse -c 'bundle exec rake db:migrate'
  11. اخرج من الحاوية
  12. أعد تفعيل إضافة discourse-assign في ملف app.yml
  13. أعد بناء التطبيق مرة أخرى باستخدام الأمر ./launcher rebuild app
  14. تاتا-دا-دا-تام! يعمل كل شيء!

لا أملك كلمات مناسبة لوصف هذه العملية! )))))))))

شكرًا لك على الإبلاغ عن المشكلة @nahimov، يجب أن تكون قد تم إصلاحها الآن دون الحاجة إلى الحل البديل الذي وصفته

cc @dan