从 Rails 6 中删除 ActiveStorage 路由

Pan*_*nts 7 ruby-on-rails ruby-on-rails-6

我从 ActionStorage 中删除了config/application.rb但我在运行时看到了这些路由rake routes | less

我没有设置我的/config/routes.rb...

                   Prefix Verb URI Pattern                                                                              Controller#Action
       rails_service_blob GET  /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
rails_blob_representation GET  /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
       rails_disk_service GET  /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
update_rails_disk_service PUT  /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
     rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何删除这些?

ari*_*uod 6

draw_routes在 application.rb 配置文件中将配置设置为 false https://github.com/rails/rails/blob/439d4995c1dab475b576fcb19ea95ae37e0ed222/guides/source/configuring.md#configuring-active-storage

config.active_storage.draw_routes = false
Run Code Online (Sandbox Code Playgroud)

编辑:截至目前,当前的稳定版本(6.0-stable)不支持这个选项,它在主分支上,应该在下一个版本上工作


小智 6

要从现有 Rails 应用程序中删除 ActiveStorage 路由,需要进行两项更改:

首先,在config/application.rb,注释掉active_storage/engineaction_text/engine

require_relative 'boot'

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_text/engine"
require "action_cable/engine"
require "rails/test_unit/railtie"
Run Code Online (Sandbox Code Playgroud)

然后,在每个environment配置文件(例如config/development.rb)中,注释掉config.active_storage.service

# Store uploaded files on the local file system (see config/storage.yml for options).
# config.active_storage.service = :local
Run Code Online (Sandbox Code Playgroud)

这将删除 ActiveStorage 路由:

$ rails routes
You don't have any routes defined!

Please add some routes in config/routes.rb.

For more information about routes, see the Rails guide: https://guides.rubyonrails.org/routing.html.
Run Code Online (Sandbox Code Playgroud)

  • 无法理解,为什么 Rails 默认注入这些路由。有人可能想要在没有这些路由的情况下上传文件。应该有一种方法可以在不删除所有引擎的情况下删除路线。 (4认同)

sil*_*rdr 5

有一种“官方”方法可以做到这一点,它内置于 Rails 中。如果您使用以下命令创建新项目

$ rails new dummy_project --skip-active-storage
Run Code Online (Sandbox Code Playgroud)

您可以在新创建的文件中找到config/application.rb您所需要的内容(Rails 6.0.1,但从 5.2 开始工作):

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_mailbox/engine"
# require "action_text/engine"
require "action_view/railtie"
require "action_cable/engine"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Run Code Online (Sandbox Code Playgroud)

替换require 'rails/all'上面的代码片段,你就可以开始了。

  • 对于现有项目,可能值得删除架构中的项目以及任何现有的活动记录迁移 (2认同)