# Multisite:自 Rails 6.0.3 更新后迁移功能已损坏

**URL:** https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691
**Category:** Bug
**Created:** [2020年五月7日 08:13 UTC](https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691 "2020-05-07T08:13:44Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![jashankj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jashankj/32/179611_2.png) [@jashankj](https://meta.discourse.org/u/jashankj)
#### Post date: [2020年五月7日 08:13 UTC](https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691/1 "2020-05-07T08:13:44Z")

</div>

你好！

我当前处于版本 136a5456534c7e468b8052f865ce970a3bf375e9，在此版本中执行 `multisite:migrate` 会失败，错误信息如下：

```plaintext
I, [2020-05-07T06:57:21.288947 #1] INFO -- : > cd /var/www/discourse && sudo -Eu discourse bundle exec rake multisite:migrate
`/root` is not writable.
Bundler will use `/tmp/bundler20200507-300-1g5pu90300' as your home directory temporarily.
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` 中的中间件操作有关。

回退到 136a5456534c7e468b8052f865ce970a3bf375e9 之前的版本（该版本将 Rails 升级到了 6.0.3），`multisite:migrate` 可以正常运行。我还有一个开发环境实例，其中我将 `session_operations` 替换为对 `Rails.configuration.middleware` 的 `.delete` 和 `.unshift` 操作，结果看起来正常。

（除了迁移 20141216112341\_resolve\_duplicate\_group\_names 失败的问题，它声称不存在的列 `groups.automatic_membership_email_domains`，但重试后该问题消失。）

我已经忘记了大部分曾经了解的 Rails 知识，所以我的分析可能完全错误！

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [2020年五月7日 09:02 UTC](https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691/2 "2020-05-07T09:02:37Z")

</div>

是的，我也遇到了同样的问题，可以确认这是由 `200-first_middlewares.rb` 中的变更引起的。  
从那之后，我的 RoR 知识就不足以理解这里发生了什么 🤔

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年五月7日 10:45 UTC](https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691/3 "2020-05-07T10:45:34Z")

</div>

很抱歉，我们已暂时回滚了 Rails 更新：[Revert "DEV: upgrade to Rails 6.0.3" · discourse/discourse@2ff8b4f · GitHub](https://github.com/discourse/discourse/commit/2ff8b4f5d9dd72a55d7ebdc23a3758dd5ec4682d)

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2020年五月7日 10:50 UTC](https://meta.discourse.org/t/multisite-migrate-broken-since-rails-6-0-3-update/150691/4 "2020-05-07T10:50:01Z")

</div>


