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

已安装pry-rails仍报undefined method `pry'的Rails容器问题

解决GitLab Rails容器中binding.pry undefined method错误

问题场景

通过docker compose run --service-ports --detach [SERVICE_NAME]启动GitLab的Ruby on Rails Web应用容器,目标是用binding.pry断点调试源码函数。为规避初始bundle install问题,进入容器后执行gem install pry-rails安装依赖,但即便Gemfile中已引入该gem,仍触发以下错误:

==> /var/log/gitlab/gitlab-rails/production.log <==
  
ActionView::Template::Error (undefined method `pry' for #<Binding:0x00007ff556ce52b8>
Did you mean?  try):

已确认信息

  1. pry-rails已成功安装:
root@3cbe23da9b57:/# gem list | grep pry-rails
pry-rails (0.3.9)

root@3cbe23da9b57:/# gem which pry-rails
/opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/pry-rails-0.3.9/lib/pry-rails.rb
  1. Gemfile中的引入配置:
group :development, :test do
  gem 'pry-rails', '~> 0.3.9'
end
  1. RubyGems环境信息:
RubyGems Environment:
  - RUBYGEMS VERSION: 3.4.14
  - RUBY VERSION: 3.0.6 (2023-03-30 patchlevel 216) [x86_64-linux]
  - INSTALLATION DIRECTORY: /opt/gitlab/embedded/lib/ruby/gems/3.0.0
  - USER INSTALLATION DIRECTORY: /root/.local/share/gem/ruby/3.0.0
  - RUBY EXECUTABLE: /opt/gitlab/embedded/bin/ruby
  - GIT EXECUTABLE: /opt/gitlab/embedded/bin/git
  - EXECUTABLE DIRECTORY: /opt/gitlab/embedded/bin
  - SPEC CACHE DIRECTORY: /root/.local/share/gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /opt/gitlab/embedded/etc
  - RUBYGEMS PLATFORMS:
     - ruby
     - x86_64-linux
  - GEM PATHS:
     - /opt/gitlab/embedded/lib/ruby/gems/3.0.0
     - /root/.local/share/gem/ruby/3.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => true
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /opt/gitlab/embedded/bin
     - /opt/gitlab/bin
     - /assets
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin

问题原因

  1. Bundle环境未加载独立安装的gem:GitLab的Rails应用依赖bundle管理依赖,直接用gem install安装的pry-rails不在bundle的加载路径中,Rails无法识别。
  2. 运行环境不匹配:日志显示应用运行在production环境,而pry-rails仅被加入development和test组,生产环境默认不会加载该组的gem。

解决方案

方案1:切换到开发环境并执行bundle install

  1. 重新启动容器时指定开发环境:
docker compose run --service-ports --detach -e RAILS_ENV=development [SERVICE_NAME]
  1. 进入容器后执行bundle安装,让bundle识别并加载pry-rails:
docker exec [CONTAINER_ID] /bin/bash
bundle install

方案2:临时手动引入pry-rails

在需要调试的代码前添加手动引入语句,仅作为临时调试方案:

require 'pry-rails'
binding.pry

方案3:修改Gemfile后重新构建镜像(若允许)

如果可以重新构建镜像,调整Gemfile后执行构建,确保bundle install在镜像构建阶段完成:

  1. 确保pry-rails的分组符合运行环境需求,或临时移到全局组(调试完成后改回);
  2. 重新构建Docker镜像并启动容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:52:13