如何找到哪个引擎(gem)提供了一条路线

How to find what engine (gem) provides a route

我的一个 gem,一个 Rails 引擎,提供了一条不应该在那里的路线。我想知道 gem 是什么。

这是一个 Spree 站点,有一些扩展,因此有很多带有依赖项的小型引擎:其中之一是提供 admin/login,这不应该存在。当我构建一个 "vanilla" spree 站点时,该路由不存在,但在我的旧实例和随时间升级的实例中,它存在。

有没有办法快速获取按定义它们的文件或引擎分组的所有路由的列表?

快速而肮脏的解决方案

我不知道 Rails 是否可以针对特定路线执行此操作。我假设您没有捆绑很多设置路由的 gem。

bundle show --paths 列出您的 Gemfile 所需的所有 gem 的路径。

鉴于 Rails 引擎也 draw their routes in config/routes.rb,您可以使用 Bundler 和 UNIX 工具找到这些文件:

find `bundle show --paths` -name routes.rb | grep -v test | grep -v spec

你不会用这个找到特定的路线,但它应该会给你一个提示去哪里找...