执行更新与autoremove后,Rails服务器启动提示缺失libssl.so.1.0.2求助
问题分析与解决方案
首先可以明确:这个错误和你系统的OpenSSL版本直接相关。
你执行apt autoremove后,旧版本OpenSSL 1.0.2对应的libssl.so.1.0.2库被自动清理了,但你的Rails项目(或者它依赖的某个Ruby gem)在编译时是链接到这个旧版本库的,现在系统里的OpenSSL版本已经更新,找不到旧库就抛出了这个错误。而你朋友的系统还保留着OpenSSL 1.0.2,所以能正常运行。
下面是几种可行的解决方案,按推荐程度排序:
1. 安装OpenSSL 1.0.2的库文件
这是最直接的修复方式,把被删掉的旧版本库装回来:
- 对于Ubuntu/Debian系统,先尝试从官方源安装:
sudo apt update sudo apt install libssl1.0.2 - 如果官方源已经移除了这个包(比如你的系统版本较新),可以手动下载对应架构的deb包安装(以Ubuntu 16.04 amd64为例):
注意:下载时要匹配你的系统架构和版本,避免兼容性问题。wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.2_1.0.2g-1ubuntu4.20_amd64.deb sudo dpkg -i libssl1.0.2_1.0.2g-1ubuntu4.20_amd64.deb
2. 重新编译依赖的Ruby gem
有时候问题出在某个gem(比如openssl gem)是基于旧版本OpenSSL编译的,重新安装可以让它适配当前系统的OpenSSL版本:
# 先卸载旧的openssl gem gem uninstall openssl # 重新安装,指定当前系统的OpenSSL路径 gem install openssl -- --with-openssl-dir=/usr/lib/ssl # 或者直接重新安装项目所有依赖 bundle install
3. 临时软链接(不推荐长期使用)
如果暂时无法安装旧版本库,可以通过软链接让系统“假装”存在旧库文件,但这是临时方案,可能会影响其他依赖新版本OpenSSL的程序:
- 先查看当前系统的libssl版本:
ls /usr/lib/x86_64-linux-gnu/libssl.so* - 假设当前版本是
libssl.so.1.1,创建软链接:sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2
执行完上述任意一种方案后,再尝试启动Rails服务器:
rails server
内容的提问来源于stack exchange,提问作者Muhammad Faisal Iqbal
相关产品推荐
相关产品推荐

