从Rails 6中移除ActiveStorage路由

11

我从config/application.rb中移除了ActionStorage,但是当我运行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

请问有人知道我该如何移除这些东西吗?

4个回答

12

需要进行两个更改以从现有的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"

然后,在每个环境配置文件中(例如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

这将删除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.

在Rails 6中,我还需要注释掉require 'action_mailbox/engine'以删除这些路由。 - cyrilchampier
4
不理解为什么Rails默认注入这些路由。 有人可能想上传文件,但不需要这些路由。应该有一种方法可以删除路由,而不必删除整个引擎。 - Ahmed Kooli

7

就我现在的理解,该配置选项不包含在稳定版本中,而是包含在主分支上,并且它将适用于下一个版本。我认为现在您无法跳过这些路由而不通过黑客攻击代码(我不建议这样做)。 - arieljuod
这是最佳答案,因为它允许您继续使用ActiveStorage,但在您不需要时删除路由。其他答案会完全使ActiveStorage无法使用。 - senya
这是最好的答案,因为它允许您继续使用ActiveStorage,但在您不需要时删除路由。其他答案会完全使ActiveStorage失去功能。 - undefined

5

有一种“官方”的方法可以实现这个功能,在Rails中已经内置了。如果你使用以下命令创建新项目:

$ rails new dummy_project --skip-active-storage

你可以在新建的 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"

用上述代码替换require 'rails/all',您就可以顺利进行。

2
对于一个已经存在的项目,删除模式中的条目以及任何现有的活动记录迁移可能是值得的。 - BenKoshy

0

这有点傻,但出于某种原因删除 config/storage.yml 也会清除那些路由。


好的 - 我没有 config/storage.yml 文件(应用程序从Rails 5.0迁移到了5.3),但是不需要的路由仍然显示出来。 - silverdr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接