ruby 将rmagick从3.5升级到5.2.0后,Carrierwave发送无方法background_color错误

syqv5f0l  于 2023-06-22  发布在  Ruby
关注(0)|答案(2)|浏览(112)

在一个旧的Ruby on Rails项目中,使用版本4.2.11和Ruby 2.7.6,我们在将RMagick从版本3.5升级到5.2后遇到了一个问题。具体来说,当我们使用resize_and_pad方法时,CarrierWave 1.3.1停止工作。显示的错误消息为:

undefined method `background_color=' for #<ChildrenClass::Uploader72920:BadassMemoryAddress>

我们检查了RMagick文档,没有发现更新中有破坏性更改的迹象。但是,似乎RMagick没有正确安装,或者它没有background_color=方法。
我们不确定其他人是否也经历过同样的错误,或者是否有人知道是什么导致了它。
注意:降级RMagick不是我们的选择,因为我的本地不支持所需C库的旧版本。
谢谢祝你今天愉快!

  • 降级rmagic ->本地不工作(Mac M1)
  • 重建gem文件->多个gem崩溃(旧项目)
bpsygsoo

bpsygsoo1#

您正在尝试运行Carrierwave gem,其版本比您正在使用的RMagick gem版本早4年发布。
因为Carrierwave依赖于RMagick,所以我对旧的Carrierwave版本可能与最近的RMagick版本不兼容并不感到惊讶。
我建议使用在RMagick版本之后发布的Carrierwave版本。因为你已经写过你不能将RMagick降级到5.2以下,所以唯一的选择似乎是将Carrierwave升级到RMagick 5.2发布后发布的版本,即on 2023-03-12
不幸的是,这样的Carrierwave版本并不存在。因此,我会尝试最新主要版本的最新次要版本,希望这个问题已经得到解决。我会尝试将Carrierwave升级到these versions之一(在撰写本文的当天):

  • 1.3.3 - 2023-02-02
  • 2.2.3 - 2022-11-21
  • 粤ICP备09018888号-1

因为你的Carrierwave版本是一个主要的版本落后,Carrierwave 3.0仍然在测试中,最好的选择似乎是升级Carrierwave到2.2.3
一般建议
您仍然在使用8年前发布的Ruby on Rails 4.2运行我们的应用程序,它有几个众所周知的安全漏洞(参见herehere),并且它已经达到生命周期结束more than 6 years ago
您的旧版本的Rails只能与达到生命周期结束且未维护的Ruby版本一起运行。这意味着您将不会再获得任何错误修复或安全更新。很快您就会注意到更新的gem使用了过时的Ruby版本不支持的新语言特性或新语法。每次你被迫改变应用程序时(例如,当gem或Ruby本身不能在新的硬件或可用的操作系统版本上编译时),它会变得越来越难。
当您计划继续维护和运行应用程序时,您的优先级应该是尽快更新应用程序。
因为你已经落后很多年,这样的升级需要一些时间。我写了关于latest Ruby and Ruby on Rails versions in this answer的首选升级路径。

pbwdgjma

pbwdgjma2#

我最近解决了与Carrierwave gem(1.3.1)和RMagick gem(5.2.0)兼容性相关的问题,我想与大家分享我的解决方案。通过调查问题,我发现从RMagick 5.2切换到MiniMagick 4.12解决了手头的问题。
在回答一个相关的问题时,似乎使用过时版本的Carrierwave以及更新版本的RMagick可能会导致兼容性问题。考虑到Carrierwave依赖于RMagick,这个结果并不完全令人惊讶。
(Note:如果您使用的是Carrierwave版本1.3.1 - 1.3.3,建议使用RMagick 3.X以避免问题。)
请记住,这些建议可能会发生变化,因此我建议您验证最新版本,并确保它们与您的特定项目兼容。我希望这些信息证明有帮助!
另外,我注意到方法**“resize_and_pad”在Carrierwave中导致崩溃,它是由于缺少RMagick 5.2中不可用的“background_color”而导致的**,

相关问题