OSX Sierra环境下执行迁移时RMagick加载依赖库失败求助
我之前在OSX Sierra上跑Rails项目做数据库迁移时,也碰到过一模一样的RMagick报错,核心问题就是RMagick 2.16.0依赖的ImageMagick 6系列库找不到了——毕竟现在Homebrew默认装的是ImageMagick 7,而且Sierra的动态库加载规则也有变化。给你几个亲测有效的解决步骤:
步骤1:安装兼容的ImageMagick 6版本
首先把当前可能装的ImageMagick卸载,然后安装指定的6.x版本:
brew uninstall --force imagemagick brew install imagemagick@6 brew link imagemagick@6 --force
这里加--force是为了确保系统优先用这个6版本的库,避免和7版本冲突。
步骤2:重新安装RMagick gem
卸载现有的rmagick,然后基于刚装的ImageMagick 6重新安装:
gem uninstall rmagick gem install rmagick -v 2.16.0 --with-opt-dir=$(brew --prefix imagemagick@6)
--with-opt-dir参数是告诉gem去哪里找ImageMagick的头文件和库,确保它能正确关联到我们刚装的6版本。
步骤3:手动修复动态库路径(如果前两步没用的话)
如果还是报错,就需要检查RMagick的bundle文件依赖路径是否正确:
先查看当前依赖:
otool -L /Users/xyz/.rvm/gems/ruby-2.4.0@nc/gems/rmagick-2.16.0/lib/RMagick2.bundle
你会看到输出里libMagickCore-6.Q16.2.dylib的路径是/usr/local/lib/但实际这个文件已经不在了(因为我们装的是imagemagick@6,路径在/usr/local/opt/imagemagick@6/lib/)。这时候用install_name_tool修改路径:
install_name_tool -change /usr/local/lib/libMagickCore-6.Q16.2.dylib $(brew --prefix imagemagick@6)/lib/libMagickCore-6.Q16.dylib /Users/xyz/.rvm/gems/ruby-2.4.0@nc/gems/rmagick-2.16.0/lib/RMagick2.bundle
注意:如果你的ImageMagick 6版本的库文件名后缀不是.2.dylib,比如是.6.dylib,要对应改成实际的文件名,你可以去$(brew --prefix imagemagick@6)/lib/目录下看一下。
做完这些步骤后,再跑数据库迁移命令应该就能正常执行了。
内容的提问来源于stack exchange,提问作者Shaunak

