没有为 binding.pry 提供 REPL 的护栏
Posted
技术标签:
【中文标题】没有为 binding.pry 提供 REPL 的护栏【英文标题】:Guard-rails not providing REPL for binding.pry 【发布时间】:2012-12-18 16:21:31 【问题描述】:我正在使用护栏来运行我的 rails 服务器,我的问题是当我添加绑定时我无法访问 REPL。pry 我刚刚得到
From: /home/martinr/code/app/controllers/tools_controller.rb @ line 2 ToolsController#index:
2: def index
=> 3: binding.pry
4: @end_date = Date.today.to_s
5: @start_date = Date.today.months_ago(3).to_s
7: end
[1] pry(#<ToolsController>)>
没有 REPL,如何使用 pry 和护栏?
我的 Gemfile 文件如下所示
group :development, :test do
gem 'pry-rails' # for better console debugging
gem 'pry-debugger'
gem 'rb-inotify'
gem 'sqlite3'
end
我的保护文件:
guard 'rails', :debugger => true do
watch('Gemfile.lock')
watch(%r^(config|lib)/.*)
end
【问题讨论】:
什么意思?你不能输入任何东西或什么? 我的意思是它似乎加载了 REPL 并继续执行程序。它不会让您有机会与 REPL 进行交互。 有这方面的消息吗?有这个工作真的很好。 不知道是不是这样,但是你们在Guard的Wiki GitHub上看到this post了吗? 【参考方案1】:我已经用 Guard 和 Spork 设置了我的 rails 环境,我发现 binding-pry 对 guard 的行为很奇怪。如果我将 binding.pry 插入代码中,然后 guard 重新启动我的测试,则没有交互式调试。但如果我退出并再次开始警戒,它就会正常工作并正确进入交互模式。
但是...如果我随后删除 binding.pry 行,guard 将按预期重新运行测试,但会在绑定行以前所在的位置中断,即使它不再存在。
似乎每次插入或删除 pry 绑定时都必须重新启动保护。
令人恼火,但总比无法在测试中撬动要好。
【讨论】:
【参考方案2】:我正在尝试类似的事情,但也无法正常工作。这个问题似乎从 stdin 读取不会阻塞,所以 Pry 不会阻塞。从 STDIN 读取的任何内容都会立即返回。
rspec -X console.rb
文件如下:
require 'spec_helper'
describe 'console' do
it 'opens!' do
Pry.config.input = STDIN
Pry.config.output = STDOUT
puts STDIN.closed? # returns false
binding.pry # returns right away, does not block
gets # returns right way, does not block
end
end
【讨论】:
以上是关于没有为 binding.pry 提供 REPL 的护栏的主要内容,如果未能解决你的问题,请参考以下文章
Puma Rails 5 binding.pry仅在超时前60秒可用
使用 Rails.cache 时 Rspec 测试失败,但如果我执行 binding.pry 则通过
markdown 在docker容器中运行binding.pry