在 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 中间件

如何禁用来自循环的其他div,除了单击的div

如何在 Rails 3.1 应用程序中完全禁用 CoffeeScript?

Rails 4:如何在 Rails 中使用 JQuery 禁用基于复选框值的文本字段