Mac OS X安装Gitlab遇charlock_holmes及rake执行错误求助
解决Mac OS X上GitLab安装的Gem依赖与Rake Setup错误
我帮你梳理一下遇到的两个问题,这都是Mac环境下安装旧版GitLab(你用的是10.x版本)时常见的兼容性问题,一步步来解决:
一、彻底解决charlock_holmes的安装问题
你手动安装这个gem成功是正确的方向,但直接用--no-deployment会破坏GitLab依赖的版本锁定,容易引发后续冲突。更规范的做法是让Bundle自动传递编译参数:
先确保安装必要的系统依赖:
# 安装Xcode命令行工具(未安装的话执行) xcode-select --install # 用Homebrew安装charlock_holmes依赖的字符处理库 brew install icu4c配置Bundle,让它安装charlock_holmes时自动带上编译参数:
bundle config build.charlock_holmes --with-icu-dir=$(brew --prefix icu4c) --with-cxxflags=-std=c++11删除残留的不完整依赖,重新执行官方Bundle命令:
rm -rf vendor/bundle bundle install --deployment --without development test mysql aws kerberos这样Bundle会严格按照GitLab的Gemfile.lock安装所有依赖,同时正确编译charlock_holmes。
二、解决rake gitlab:setup的TypeError错误
这个compared with non class/module错误,本质是Ruby版本不兼容:GitLab 10.x版本仅支持Ruby 2.3.x系列,而Mac自带的Ruby或你安装的高版本Ruby(比如2.4+)修改了Module#===的行为,导致旧版gem触发类型错误。
解决步骤:
用Ruby版本管理工具(比如rbenv或rvm)安装GitLab指定的Ruby版本:
# 以rbenv为例,先安装rbenv(未安装的话执行) brew install rbenv ruby-build # 安装GitLab 10.5适配的Ruby 2.3.8 rbenv install 2.3.8 # 在GitLab目录下设置本地Ruby版本 cd /path/to/your/gitlab rbenv local 2.3.8重新执行Bundle安装(确保用正确的Ruby版本):
rm -rf vendor/bundle bundle install --deployment --without development test mysql aws kerberos最后执行setup命令:
bundle exec rake gitlab:setup RAILS_ENV=production
额外注意事项
- 不要随意使用
--no-deployment参数,GitLab的依赖版本是严格锁定的,这个参数会让Bundle忽略Gemfile.lock,引入未测试过的gem版本,引发各种奇怪问题。 - 如果之前手动安装过charlock_holmes到全局gem库,建议先卸载:
gem uninstall charlock_holmes -v 0.7.3,让Bundle统一管理所有依赖更稳妥。
内容的提问来源于stack exchange,提问作者ibocon
相关产品推荐
相关产品推荐

