Ubuntu20.04下Mastodon执行bundle update多Gem安装失败求助
解决Ubuntu 20.04下Mastodon bundle update时Ruby头文件缺失及相关问题
1. 彻底清理RVM残留
残留的RVM环境会干扰Ruby路径,执行以下命令完全移除:
rvm implode rm -rf ~/.rvm ~/.rvmrc /etc/rvmrc /etc/profile.d/rvm.sh /usr/local/rvm /usr/local/bin/rvm sed -i '/rvm/d' ~/.bashrc ~/.bash_profile ~/.profile ~/.zshrc source ~/.bashrc
验证:执行echo $rvm_path,无输出则清理完成。
2. 安装Ruby原生扩展依赖
ruby.h缺失是因为未安装Ruby开发包,执行以下命令安装系统级编译依赖:
sudo apt update sudo apt install -y ruby-dev build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
这些包包含构建racc、nio4r等Gem所需的头文件和编译工具。
3. 修复APT版RubyGems无法升级的问题
APT提供的RubyGems版本受限,无法直接升级,处理步骤:
sudo apt remove --purge rubygems gem update --system
验证:执行gem --version,确认已更新至最新稳定版。
4. Docker容器环境的适配操作
由于你的Mastodon运行在Docker容器中,推荐两种处理方式:
方式一:直接在运行中的容器内操作
进入容器终端:
docker exec -it <你的Mastodon容器名称> bash
在容器内重复步骤2和3(容器基于Debian/Ubuntu系,使用apt命令),然后执行更新和迁移:
bundle update rails db:migrate
方式二:构建自定义镜像持久化配置
创建Dockerfile添加依赖安装步骤:
FROM tootsuite/mastodon:latest RUN apt update && \ apt install -y ruby-dev build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev && \ rm -rf /var/lib/apt/lists/* RUN gem update --system
构建镜像并重启容器:
docker build -t custom-mastodon . docker stop <原容器名称> docker run -d --name <新容器名称> custom-mastodon
5. 验证修复效果
执行bundle update,如果无原生扩展构建错误,说明问题解决;随后完成数据库迁移即可。
内容的提问来源于stack exchange,提问作者doggie015
相关产品推荐
相关产品推荐

