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
可能的原因及排查方向
强制启用Bundler部署模式
在Apache虚拟主机配置中添加SetEnv BUNDLE_DEPLOYMENT "1",强制Bundler使用vendor/bundle目录下的Gem,避免回退到系统Gem源。指定Passenger使用项目Ruby版本
当前环境变量显示存在rbenv,但Passenger可能未正确使用项目指定的Ruby。在Apache配置中添加:PassengerRuby /home/openproject/.rbenv/shims/ruby确保Ruby版本与部署时一致,避免Gem路径不匹配。
重置Bundler状态
清理缓存并重新部署:bundle clean --force bundle install --deployment --without development test同时确认
Gemfile.lock未被修改,保证依赖版本与部署环境一致。排查Passenger与Bundler兼容性
Passenger 6.0.15与Bundler 2.3.12可能存在兼容性问题,尝试更新Passenger到最新稳定版,或降级Bundler至2.2.x系列后重新部署。清除干扰性环境变量
当前RUBYLIB指向系统Bundler路径,可能干扰加载逻辑。在Apache配置中添加:SetEnv RUBYLIB "" SetEnv RUBYOPT ""让Bundler自行管理加载路径。
内容的提问来源于stack exchange,提问作者janitor048
相关产品推荐
相关产品推荐

