升级从 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

正如您所诊断的,问题出在 discord assign 插件上。(您是指 discord 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
```\n我该如何修复这个问题?如果直接在这个文件中修改,当重建开始时,仓库会被重新下载,我的修改会被覆盖吗?

解决方案:

  1. app.yml 中注释掉 discourse-assign 插件
  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. app.yml 中取消注释 discourse-assign 插件
  13. 再次使用 ./launcher rebuild app 重新构建应用
  14. 大功告成!一切正常!

我简直找不到合适的词来形容这个过程!))))))))

感谢报告此问题 @nahimov,现在问题已修复,无需使用您描述的变通方法。

cc @dan