从 Rails 6 中删除 ActiveStorage 路由
Posted
技术标签:
【中文标题】从 Rails 6 中删除 ActiveStorage 路由【英文标题】:Remove ActiveStorage routes from Rails 6 【发布时间】:2020-01-16 16:00:41 【问题描述】:我从 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
有人知道我可以如何删除这些吗?
【问题讨论】:
【参考方案1】:从现有 Rails 应用程序中删除 ActiveStorage 路由需要进行两项更改:
首先,在config/application.rb
中,注释掉active_storage/engine
和action_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"
然后,在每个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
这将删除 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'
以删除这些路线。
无法理解,为什么 Rails 默认会注入这些路由。有人可能想上传文件,没有这些路线。应该有一种方法,可以在不移除所有引擎的情况下移除路线。【参考方案2】:
在您的 application.rb 配置文件 https://github.com/rails/rails/blob/439d4995c1dab475b576fcb19ea95ae37e0ed222/guides/source/configuring.md#configuring-active-storage 上将 draw_routes
配置设置为 false
config.active_storage.draw_routes = false
编辑:截至目前,当前稳定版本(6.0-stable)不支持此选项,它位于主分支上,应该可以在下一个版本中使用
【讨论】:
据我所知,该配置选项不在稳定版本上,它在主分支上,它将在下一个版本中工作,我认为你现在不能跳过这些路线破解代码(我不推荐)。【参考方案3】:有一种“官方”方法可以做到这一点,它内置在 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"
用上面的sn-p替换require 'rails/all'
,你应该很高兴。
【讨论】:
对于现有项目,可能值得删除架构中的项目 + 任何现有的活动记录迁移【参考方案4】:这有点愚蠢,但出于某种原因删除config/storage.yml
也摆脱了这些路线。
【讨论】:
好吧 - 我没有config/storage.yml
(应用程序从 5.0 迁移到 Rails 5.3)文件,但无论如何都会显示不需要的路由。以上是关于从 Rails 6 中删除 ActiveStorage 路由的主要内容,如果未能解决你的问题,请参考以下文章
Rails 如何知道何时从 `sessions` 表中删除记录?
有没有办法在 Rails 6 中禁用动作文本的图像/附件部分?