Rails: 找到不再匹配任何控制器的 routes/methods

Rails: find routes/methods which no longer match any controller

我有一个巨大的单体 Rails 存储库,其中包含几千条路由。 随着时间的推移,开发人员要么删除了映射到现有控制器的路由,要么删除了仍然有路由映射到它的控制器

有没有一种聪明的方法可以让我在我的 rails 应用程序中系统地发现这些异常并进行清理?

注意:请假设这些不匹配不会出现面向用户的问题,而只是出于维护目的 trim 错误路由的数量

没有这样的命令可以找到你:

但是您可以做一件事:

运行 命令:

rails routes > routes.rb 

它会将你所有的路线写在一个文本文件中,如果你有时间,你可以手动匹配它们。
但是,如果您在 Rails 应用程序中存在额外的路由,这在大多数 Rails 应用程序中很常见。

我发现这个 gem 旨在稍微解决我的问题

https://github.com/amatsuda/traceroute

traceroute gem 看起来很不错,但以防万一它无法按预期工作,您可以在 rails 控制台中执行此操作。

获取所有控制器及其操作的数组:

ApplicationController.descendants.map {|c| [c, c.action_methods]}

获取所有路线的数组:

Rails.application.routes.routes.map &:defaults

然后您可以遍历两个数组,选择出现在一个数组中但不出现在另一个数组中的动作。

config/environments.development.rb 中启动控制台之前设置 config.eager_load = true。没有这个,您将看不到所有控制器。