当使用已安装引擎的设计时,没有路由匹配 [GET]“/accounts/sign_in”

No route matches [GET] "/accounts/sign_in" when use devise from mounted engine

我在使用 Devise 的应用程序中安装了一个引擎。而且我还要再安装一个也应该使用它的。所以我决定使用第一个引擎的设计。

config/routes.rb:

Rails.application.routes.draw do
  mount EngineWithDevise::Engine => "/engine_with_devise"
  mount MyEngine::Engine => "/my_engine"
end

一切正常,但当我添加以下代码时:

module MyEngine
  class ApplicationController < ActionController::Base
    before_action :authenticate_account!
  end
end

我收到以下错误:

 ActionController::RoutingError:
   No route matches [GET] "/accounts/sign_in"

所以它重定向到 /accounts/sign_in 而不是 /devise_with_engine/accounts/sign_in

当我手动访问它时是登录成功然后正常工作。 当我将引擎安装到 / 时它工作正常:

Rails.application.routes.draw do
  mount EngineWithDevise::Engine => "/"
  mount MyEngine::Engine => "/my_engine"
end

根据manual我添加的路由器名称:

config.router_name = engine_with_devise

并做了那里描述的所有事情。 但这并没有帮助。

我用的是最后一个Devise版本

有什么想法吗?

在调试 devise gem 时,我发现 commit 破坏了默认引擎路径。 所以现在的解决方案是使用 Devise 3.5.1 而不是 3.5.2(目前是最后一个设计版本)

问题也有描述here