【问题标题】:Get routes of Rails app without running rake routes在不运行 rake 路线的情况下获取 Rails 应用程序的路线
【发布时间】:2014-05-08 19:06:09
【问题描述】:
我对 rake 路由的理解是它引导 Rails 应用程序,然后从中提取路由。如果我想简单地查看文本(不加载 rails 应用程序)并能够输出类似于 rake 路由输出的内容,我该怎么做?我知道 rake 路由实际上运行 Ruby 代码,我担心这样做,因为我不信任这些应用程序。
我厌倦了加载 Rails 应用程序,因为我不信任这些 Rails 应用程序,但如果有一种方法可以沙箱运行 rake 路由或一些相关方法,我也会对此持开放态度。
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-3
ruby-on-rails-4
rake
【解决方案1】:
如果您有一个包含大量引擎的复杂路由文件,您最好使用 Vagrant 在沙箱中运行应用程序。如果它很简单,这个方法可能对你有用。
Rails 将在没有底层应用程序的情况下从 routes.rb 生成路由。创建一个新的虚拟应用程序,确保将 rails 版本与您要检查的应用程序的版本相匹配。
> rails new dummy_app
…
> cd dummy_app
> cp /path/to/untrusted/app/config/routes.rb ./config/
编辑路由文件顶部的应用名称以匹配虚拟应用的名称,在本例中为DummyApp.Application.routes.draw do。然后运行
> rake routes
一些警告:如果那里有任何引擎或 gem 特定路线,您需要将它们添加到 Gemfile 或注释掉这些路线。例如,如果 pap 使用 active_admin,您需要将其添加到 gemfile 并生成 AdminUser 类。然后,当生成器将行添加到路由文件时,您需要重新复制路由文件。如果您遇到未初始化内容的问题,您可能需要一个初始化程序来要求某些类。例如,如果你挂载 Resque::Server,你需要一个包含这两行的初始化器:
# config/initializers/dummy_init.rb
require 'resque'
require 'resque/server'