替换GitLab内置服务后Passenger无法找到Ruby依赖Gem
解决Passenger无法找到GitLab-Rails依赖Gem的问题
核心问题是Passenger启动GitLab-Rails时,未加载GitLab嵌入式环境的Gem路径,导致依赖缺失。以下是具体解决步骤:
1. 在Nginx配置中添加Gem环境变量
打开gitlab.conf配置文件,在对应的server块(或全局http块)内添加以下配置,强制Passenger使用GitLab的Gem路径:
# 确保已正确设置Ruby路径 passenger_ruby /opt/gitlab/embedded/bin/ruby; # 指定GitLab专属的Gem路径 passenger_env_var GEM_HOME /opt/gitlab/embedded/lib/ruby/gems/2.7.0; passenger_env_var GEM_PATH /opt/gitlab/embedded/lib/ruby/gems/2.7.0; # 指定GitLab运行环境(默认生产环境) passenger_env_var RAILS_ENV production;
2. 恢复Passenger全局配置locations.ini
你之前修改的locations.ini是Passenger的系统级Ruby库路径配置,而Gem的查找逻辑由GEM_PATH和GEM_HOME环境变量控制,修改该文件无法解决Gem依赖问题,建议将其恢复为默认值:
ruby_libdir=/usr/share/ruby/vendor_ruby
3. 验证配置并重启服务
- 先检查GitLab嵌入式环境的Gem是否完整:
/opt/gitlab/embedded/bin/bundle check --gemfile=/opt/gitlab/embedded/service/gitlab-rails/Gemfile
- 重启Nginx服务:
systemctl restart nginx
- 查看Nginx的
error.log,确认是否仍有Gem缺失报错。
内容的提问来源于stack exchange,提问作者fred
相关产品推荐
相关产品推荐

