在 Rails 5.2 中禁用活动存储
Posted
技术标签:
【中文标题】在 Rails 5.2 中禁用活动存储【英文标题】:Disable Active Storage in Rails 5.2 【发布时间】:2018-09-23 14:09:59 【问题描述】:将 Rails 升级到 5.2,我发现我必须将 storage.yml 提交到版本控制中。我不打算使用 ActiveStorage。有没有办法禁用它?
【问题讨论】:
【参考方案1】:从config/environments/*.rb
中删除如下行
config.active_storage.service = :local
Rails 将不会加载 yaml 文件。
【讨论】:
这会完全停止在应用启动时加载引擎吗?不是有config.active_storage = false
之类的吗?
@codingaddicted 我在文档中没有看到。好吧,我的主要问题是它试图加载我不想要/不需要的 YAML 文件。
是的,我相信这些文档并不完整。我的很多问题暂时没有关于主动存储的回应:(
@codingaddicted 如果您的解决方案有效?将其发布为答案,以便我接受。
我还没有找到解决方案,我认为@MikeRogers0 的方法值得一试。我不明白为什么你的评价是负面的,因为它也是一个有效的选择。平衡;)【参考方案2】:
到目前为止我发现的唯一解决方案是在config/application.rb
,替换:
require 'rails/all'
与:
require "rails"
# Include each railties manually, excluding `active_storage/engine`
%w(
active_record/railtie
action_controller/railtie
action_view/railtie
action_mailer/railtie
active_job/railtie
action_cable/engine
rails/test_unit/railtie
sprockets/railtie
).each do |railtie|
begin
require railtie
rescue LoadError
end
end
取自 Rails 的source。
【讨论】:
应用这个后,运行rails routes
时出现如下错误:NoMethodError: undefined method "active_storage" for #<Rails::Application::Configuration:0x00005589ab85b968>
您的active_storage
文件中可能有一个active_storage
引用;)【参考方案3】:
从config/application.rb
中删除下一行
require "active_storage/engine"
从环境中删除下一行 config/environments/*.rb
config.active_storage.service = :local
从app/assets/javascripts/application.js
中删除下一行
//= require activestorage
ActiveStorage rails 路由将消失
如果application.rb
中有声明require 'rails/all'
,那么您可以使用下面提供的解决方案,您需要逐个依赖并省略active_storage
。
【讨论】:
我已经这样做了,但是运行 rake 路由仍然会产生/rails/active_storage...
路由
现在有点不同,因为在application.rb
中有声明require 'rails/all'
,所以你需要逐个依赖,并确保不要遗漏一些重要的东西。请参阅下面的答案以供参考。
我刚刚测试过,下面的解决方案适用于这种情况,当有require 'rails/all'
以上是关于在 Rails 5.2 中禁用活动存储的主要内容,如果未能解决你的问题,请参考以下文章
Rails 5.2 MiniMagick::Error 使用具有比率和活动存储的图像变体时
Ruby on rails 5.2 - 带有活动存储的背景图像
在 laravel 5.2 中禁用特定路由的 Web 中间件