You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Passenger+Bundler异常:部署应用未加载vendor/bundle中的Gems

问题:Passenger + Apache 运行OpenProject时无法加载vendor/bundle中的Gems

环境信息

  • Ruby应用:OpenProject v12
  • Phusion Passenger:6.0.15
  • Apache:2.4.54
  • Ruby版本:3.1.2
  • 系统:树莓派4(硬件环境与问题无关)

问题现象

  • 已执行bundle install --deployment,所有Gems已正确部署到./vendor/bundle目录
  • Passenger加载应用时出现版本错误或Gem缺失,错误显示加载的是系统/用户空间Gem而非vendor/bundle中的版本
  • Passenger友好错误页面的activated_gems显示为错误版本,移除系统Gem后该Gem也从列表中消失
  • 权限无问题:应用以openproject用户运行,vendor/bundle及子目录均归该用户所有且可访问
  • Bundler/setup看似运行正常,但加载路径存在异常

日志细节

ruby_info

RUBY_VERSION = 3.1.2
RUBY_PLATFORM = aarch64-linux
RUBY_ENGINE = ruby
RubyGems version = 3.3.25
RubyGems paths = ["/home/openproject/openproject/vendor/bundle/ruby/3.1.0"]

环境变量

USER = openproject
TEXTDOMAIN = Linux-PAM
SHLVL = 0
HOME = /home/openproject
WSGI_ENV = development
PYTHONUNBUFFERED = 1
PASSENGER_USE_FEEDBACK_FD = true
APACHE_RUN_DIR = /var/run/apache2
APACHE_PID_FILE = /var/run/apache2/apache2.pid
LOGNAME = openproject
JOURNAL_STREAM = 8:19903
SERVER_SOFTWARE = Apache/2.4.54 (Debian) Phusion_Passenger/6.0.15
RACK_ENV = development
RBENV_SHELL = bash
PATH = /home/openproject/openproject/vendor/bundle/ruby/3.1.0/bin:/home/openproject/.nodenv/shims:/home/openproject/.nodenv/bin:/home/openproject/.rbenv/shims:/home/openproject/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
INVOCATION_ID = fcc115b63f334260aa3d8095470cde64
APACHE_LOCK_DIR = /var/lock/apache2
LANG = C
PASSENGER_SPAWN_WORK_DIR = /tmp/passenger.spawn.XXXXA4E1WH
SHELL = /bin/bash
IN_PASSENGER = 1
NODE_PATH = /home/openproject/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/passenger-6.0.15/src/nodejs_supportlib
APACHE_RUN_GROUP = www-data
APACHE_RUN_USER = www-data
APACHE_LOG_DIR = /var/log/apache2
RAILS_ENV = development
SECRET_KEY_BASE = 1f1b879d25c6e48581ea65067c808ac965bd7598eb0bdf2ba497865e32113cbf5e5a290b59bfab62e882c03eac3ff61efb4cbc954984c422c5770ee931d0c4d0
NODENV_SHELL = bash
PWD = /home/openproject/openproject
PASSENGER_APP_ENV = development
NODE_ENV = development
BUNDLER_ORIG_BUNDLE_BIN_PATH = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_BUNDLE_GEMFILE = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_BUNDLER_VERSION = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_GEM_HOME = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_GEM_PATH = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_MANPATH = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_PATH = /home/openproject/.nodenv/shims:/home/openproject/.nodenv/bin:/home/openproject/.rbenv/shims:/home/openproject/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
BUNDLER_ORIG_RB_USER_INSTALL = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_RUBYLIB = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
BUNDLER_ORIG_RUBYOPT = BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL
GEM_PATH = 
GEM_HOME = /home/openproject/openproject/vendor/bundle/ruby/3.1.0
BUNDLE_BIN_PATH = /home/openproject/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/exe/bundle
BUNDLE_GEMFILE = /home/openproject/openproject/Gemfile
BUNDLER_VERSION = 2.3.12
RUBYOPT = -r/home/openproject/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib/bundler/setup
RUBYLIB = /home/openproject/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bundler-2.3.12/lib

可能的原因及排查方向

  1. 强制启用Bundler部署模式
    在Apache虚拟主机配置中添加SetEnv BUNDLE_DEPLOYMENT "1",强制Bundler使用vendor/bundle目录下的Gem,避免回退到系统Gem源。

  2. 指定Passenger使用项目Ruby版本
    当前环境变量显示存在rbenv,但Passenger可能未正确使用项目指定的Ruby。在Apache配置中添加:

    PassengerRuby /home/openproject/.rbenv/shims/ruby
    

    确保Ruby版本与部署时一致,避免Gem路径不匹配。

  3. 重置Bundler状态
    清理缓存并重新部署:

    bundle clean --force
    bundle install --deployment --without development test
    

    同时确认Gemfile.lock未被修改,保证依赖版本与部署环境一致。

  4. 排查Passenger与Bundler兼容性
    Passenger 6.0.15与Bundler 2.3.12可能存在兼容性问题,尝试更新Passenger到最新稳定版,或降级Bundler至2.2.x系列后重新部署。

  5. 清除干扰性环境变量
    当前RUBYLIB指向系统Bundler路径,可能干扰加载逻辑。在Apache配置中添加:

    SetEnv RUBYLIB ""
    SetEnv RUBYOPT ""
    

    让Bundler自行管理加载路径。

内容的提问来源于stack exchange,提问作者janitor048

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:55:20