You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Simple Synteny的SyntenyDrawer.rb时遇Magick相关错误求助

解决Simple Synteny中RMagick初始化报错:undefined method 'density=' for main:Object

问题原因

报错的核心是新版RMagick(3.x及以上)修改了Magick::Image.new块的上下文规则:旧版RMagick中,Image.new块内的self指向创建的Image实例;但新版中self指向全局main对象,导致self.density = $DPI找不到对应方法。

解决方案

方案1:修改代码适配新版RMagick

找到SyntenyDrawer.rb第1442行的代码:

canvas = Magick::Image.new(img_width, img_height) {self.density = $DPI}

替换为以下两种写法之一:

写法A:显式用块参数引用Image实例

canvas = Magick::Image.new(img_width, img_height) { |image| image.density = $DPI }

写法B:使用关键字参数(RMagick 3.0+支持)

canvas = Magick::Image.new(img_width, img_height, density: $DPI)

修改后重新运行程序即可。

方案2:安装兼容旧版RMagick(无需修改代码)

如果不想改动程序代码,可以安装适配原代码的旧版RMagick(2.x系列),步骤如下:

  1. 卸载当前RMagick版本:
gem uninstall rmagick
  1. 安装旧版RMagick依赖的ImageMagick 6:
sudo apt-get install imagemagick-6.q16 libmagickcore-6.q16-dev libmagickwand-6.q16-dev
  1. 安装兼容的RMagick版本:
gem install rmagick -v 2.16.0

安装完成后重新运行SyntenyDrawer.rb即可。

额外检查

  • 确认Ruby 2.7.x版本符合Simple Synteny的要求(2.5-2.7版本均兼容);
  • 确保程序中$DPI变量已正确定义,避免因变量未赋值引发其他问题。

内容的提问来源于stack exchange,提问作者João Paulo Vieira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:45:44