从 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/routes
和 grep -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/engine
、action_mailbox/engine
和action_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 路由中省略操作邮箱、活动存储和导体路由?的主要内容,如果未能解决你的问题,请参考以下文章
“bin/rails:没有这样的文件或目录”在 Heroku 上使用 Ruby 2 和 Rails 4
难以安装和运行rails(/ usr / local / bin / rails:没有这样的文件或目录),曾经恢复到早期的rails版本
从 Rails 6 中删除 ActiveStorage 路由