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

Posted

技术标签:

【中文标题】从 Rails 6 中的 bin/rails 路由中省略操作邮箱、活动存储和导体路由?【英文标题】:Omit action mailbox, activestorage, and conductor routes from bin/rails routes in Rails 6? 【发布时间】:2020-04-22 21:37:52 【问题描述】:

我有一个全新的 Rails 6 应用程序,并且在 config/routes.rb 中没有任何东西bin/rails routes 的输出包含大量非常长的用于 ActiveStorage、Action Mailbox 和导体的 URL 列表。

这使得bin/rails routes 作为一种文档形式完全无用,尤其是因为bin/rails routes 的选项不允许过滤 内容。

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

有人知道怎么做吗?

【问题讨论】:

您是否尝试过像here 概述的那样禁用它们? Here's the latest railties being required。如果您不想禁用它们,但仍未在 rails 路由中显示它们,则可以创建一个使用 rails routes 和 grep 的 bash 脚本来排除它们(***.com/a/3548465) 是的,我不想从我的应用程序中删除它们。如果我没有配置例如,这很奇怪。 sendgrid,我得到了这些与 sendgrid 相关的实时 URL。我可以制作 bin/routesgrep -v,但我想知道在我踏上这条路之前是否有 Rails 方法可以做到这一点。 【参考方案1】:

从 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

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

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

【讨论】:

我觉得完全不会影响。 ruby 的模块,类不会被 GC 释放。如果我们避免 require 'active_storage etc.'因此 ruby​​ 使用更少的操作系统内存对吗? 我的意思是,也许,但如果您担心内存使用情况,这里的答案不是您应该做的事情。如果您担心内存使用情况,您应该分析、寻找热点并解决它们。 @da 配置正在运行的应用程序可能具有挑战性。 我认为对于这种情况,最好只省略action_cable/engineaction_mailbox/engineaction_text/engine。做require "active_storage/engine"【参考方案2】:

您可以通过注释掉 application.rb 中的特定要求行来省略 ActionMailbox 路由。

特别是如果您评论 require "action_mailbox/engine" 行,您将不再看到任何 /rails/action_mailbox/rails/conductor/action_mailbox 路由。

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

【讨论】:

以上是关于从 Rails 6 中的 bin/rails 路由中省略操作邮箱、活动存储和导体路由?的主要内容,如果未能解决你的问题,请参考以下文章

Rails bin / rails生成模型导轨中止

“bin/rails:没有这样的文件或目录”在 Heroku 上使用 Ruby 2 和 Rails 4

难以安装和运行rails(/ usr / local / bin / rails:没有这样的文件或目录),曾经恢复到早期的rails版本

从 Rails 6 中删除 ActiveStorage 路由

模块构建失败:错误:spawn bin/rails ENOENT

6--Rails架构中的资源2