如何解决Rails报错:Image not found - ../digest/md5.bundle
解决Rails中
Image not found - ../digest/md5.bundle的问题 是的,LibreSSL 2.8.3确实会引发这个问题,原因在于Ruby 2.6.x系列(你的版本是2.6.4)在编译时默认依赖OpenSSL 1.0.x版本的库,而LibreSSL虽然是OpenSSL的分支,但它的二进制兼容性和旧版OpenSSL有差异。你的报错日志也明确显示:digest/md5.bundle在尝试加载/usr/local/opt/openssl/lib/libssl.1.0.0.dylib——这个路径是Homebrew安装的OpenSSL 1.0的标准位置,而你当前使用的LibreSSL并没有提供这个文件,所以触发了加载错误。
下面是几个可行的解决方法:
方法一:重新用兼容的OpenSSL版本编译Ruby
这是最稳妥的长期解决方案:- 首先通过Homebrew安装OpenSSL 1.0.x版本:
brew install openssl@1.0 - 用rbenv重新编译Ruby 2.6.4,指定使用刚安装的OpenSSL路径:
RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.0)" rbenv install 2.6.4 - 设置该Ruby版本为全局或本地默认:
# 全局设置 rbenv global 2.6.4 # 或者仅当前项目设置 rbenv local 2.6.4 - 重新安装bundler和项目依赖:
gem install bundler bundle install
- 首先通过Homebrew安装OpenSSL 1.0.x版本:
方法二:升级Ruby到更高版本
Ruby 2.7及以上版本对OpenSSL 1.1+和LibreSSL的兼容性更好,如果你没有必须停留在2.6.4的理由,可以尝试升级:# 比如安装Ruby 2.7.8 rbenv install 2.7.8 rbenv global 2.7.8升级后重新安装Rails和依赖即可正常使用。
临时应急方案(不推荐长期使用)
如果你需要快速临时解决,可以尝试创建软链接将LibreSSL的库映射到OpenSSL 1.0的路径,但这个方法可能引发其他兼容性问题:sudo ln -s /usr/local/opt/libressl/lib/libssl.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib sudo ln -s /usr/local/opt/libressl/lib/libcrypto.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib但再次强调,这个方法只是权宜之计,重新编译Ruby或升级版本才是更可靠的选择。
内容的提问来源于stack exchange,提问作者Laurens de Vries
相关产品推荐
相关产品推荐

