从 Rails 6 中的 bin/rails 路由中省略操作邮箱、activestorage 和导体路由?

dav*_*000 10 ruby-on-rails ruby-on-rails-6

我有一个全新的轨道6的应用程序,并没有任何东西config/routes.rb,输出bin/rails routes具有非常长的URL为ActiveStorage,动作邮箱,和指挥的大规模清单。

bin/rails routes作为一种文档形式完全无用,特别是因为 的选项bin/rails routes不允许过滤东西。

我不想省略 Rails 的这些部分,因为我可能需要它们。但我更喜欢这些路线 a) 如果我不使用它们就不存在 b) 不出现在bin/rails routes.

有谁知道如何使这项工作?

dav*_*000 12

从 Rails 6.0.2.1 开始,这是这样做的方法:

在 中config/application.rb,删除该行require "rails/all"并将其替换为:

# See https://github.com/rails/rails/blob/v6.0.2.1/railties/lib/rails/all.rb for the list
# of what is being included here
require "rails"

# This list is here as documentation only - it's not used
omitted = %w(
  active_storage/engine
  action_cable/engine
  action_mailbox/engine
  action_text/engine
)

# Only the frameworks in Rails that do not pollute our routes
%w(
  active_record/railtie
  action_controller/railtie
  action_view/railtie
  action_mailer/railtie
  active_job/railtie
  rails/test_unit/railtie
  sprockets/railtie
).each do |railtie|
  begin
    require railtie
  rescue LoadError
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,如果您保留 actiontext,您仍然会包含一些活动的存储路由。不知道为什么。此配置基本上意味着您不能使用活动存储、操作文本或操作邮箱。将这些带回来将带回许多您永远不需要的路线。

另请注意,此解决方案有成本,因为每次 Rails 版本升级时,您都必须检查rails/all.rb以确保没有添加您可能关心的新框架(或删除您不再需要的框架)。


小智 2

您可以通过注释掉 .txt 文件中的特定 require 行来省略 ActionMailbox 路由application.rb

具体来说,如果您注释该require "action_mailbox/engine"行,您将不再看到任何/rails/action_mailbox/rails/conductor/action_mailbox路线。

您需要重新启动应用程序才能使更改生效。