无GCC环境下安装Redmine(RoR应用)的可行方案咨询
无GCC环境下部署Redmine的解决方案
RoR运行时是否需要C编译器?
不需要。C编译器仅在安装带原生C扩展的Ruby gems时才用得到,运行阶段只需要编译好的二进制扩展文件(通常是.so格式),完全不用保留gcc这类编译工具。
可行的替代方案
方案1:同版本Ubuntu环境预编译完整gemset后迁移(最稳妥)
步骤如下:
- 在一台有开发环境的Ubuntu 22.04机器上,装好对应版本的Ruby、bundler,以及Redmine需要的编译依赖(gcc、make、libssl-dev等)
- 把Redmine代码同步到这台机器,执行
bundle install --path vendor/bundle(把所有gem安装到项目目录的vendor/bundle下) - 等所有gem编译安装完成后,打包整个Redmine项目目录(包含
vendor/bundle),传到目标VPS - VPS上确保Ruby版本和编译环境完全一致,直接启动Redmine就行,不用再跑
bundle install
⚠️ 必须保证两台机器的Ruby版本、系统架构(x86_64)、Ubuntu版本完全相同,不然编译好的扩展大概率不兼容。
方案2:单独编译需要C扩展的gem再复制(轻量化)
如果只想处理那些需要编译的gem(比如涉及cparse.c、arena.c的redcarpet这类markdown处理gem),可以这么做:
- 在开发环境的Ubuntu 22.04上,单独安装目标gem并指定安装目录:
gem install redcarpet --install-dir ./temp_gems - 找到该gem目录下的编译产物,比如
temp_gems/redcarpet-x.x.x/lib/redcarpet.so - 把整个gem目录(或者仅
.so文件加gem的Ruby代码)复制到VPS的Ruby gem目录(用gem env gemdir可查看路径),或者放到Redmine项目的vendor/bundle对应位置
这个方式更省空间,但需要准确找出所有带C扩展的gem,容易遗漏,不如方案1靠谱。
额外注意事项
- 目标VPS还是要装Redmine运行依赖的系统库(比如libmysqlclient-dev、libpq-dev,看你用什么数据库),但不用装gcc、make这类编译工具
- 迁移前一定要核对开发环境和VPS的Ruby版本、系统架构,避免兼容性问题
内容的提问来源于stack exchange,提问作者QF0
相关产品推荐
相关产品推荐

