Multisite: Rails 6.0.3 アップデートでマイグレーションが破損

こんにちは!

私はリビジョン 136a5456534c7e468b8052f865ce970a3bf375e9 にいて、ここで multisite:migrate を実行すると失敗します。

I, [2020-05-07T06:57:21.288947 #1]  INFO -- : > cd /var/www/discourse && sudo -Eu discourse bundle exec rake multisite:migrate
`/root` は書き込みできません。
Bundler は一時的にあなたのホームディレクトリとして `/tmp/bundler20200507-300-1g5pu90300` を使用します。
rake aborted!
NoMethodError: undefined method `call' for [:delete, RailsMultisite::Middleware]:Array
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/configuration.rb:76:in `block in merge_into'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/configuration.rb:75:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/configuration.rb:75:in `merge_into'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/engine.rb:512:in `block in app'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/engine.rb:509:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/engine.rb:509:in `app'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application/finisher.rb:97:in `block in <module:Finisher>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application.rb:363:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/dependencies.rb:324:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application.rb:339:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => multisite:migrate => db:load_config => environment
(See full trace by running task with --trace)
I, [2020-05-07T06:57:26.316379 #1]  INFO -- : 

これは config/initializers/200-first_middlewares.rb 内のミドルウェア操作に関連しているようです。

Rails 6.0.3 へのアップグレードを行うコミット 136a5456534c7e468b8052f865ce970a3bf375e9 より前の状態に戻すと、multisite:migrate が正常に動作します。また、開発インスタンスでは session_operationsRails.configuration.middleware に対する .delete.unshift に置き換えて試しましたが、結果には問題がないようです。

(…ただし、20141216112341_resolve_duplicate_group_names というマイグレーションが失敗し、存在しないカラム groups.automatic_membership_email_domains が原因だと報告されていますが、再実行するとこの問題は消えます。)

以前知っていた Rails のことはほとんど忘れてしまったので、もしかしたら完全に間違っているかもしれません!

「いいね!」 6

はい、同じ問題が発生しています。これは 200-first_middlewares.rb の変更によるものであることを確認しました。
それ以降は、何が起きているのかを理解するために必要な RoR の知識が私には不足しています :thinking:

「いいね!」 2

申し訳ありませんが、一時的に Rails のアップデートを元に戻しました: Revert "DEV: upgrade to Rails 6.0.3" · discourse/discourse@2ff8b4f · GitHub

「いいね!」 9