4

我的工作站:

$ uname -a
Linux dsktop 3.13.0-77-generic #121-Ubuntu SMP Wed Jan 20 10:50:42 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux-gnu]
# (also same behavior with ruby 2.3.1)

我对此进行了研究,发现pry-nav 出乎意料地工作——但根据该问题重新安装并没有解决我的问题。

问题——我最近使用 Brightbox Cloud ppa 资源在系统范围内安装了 Ruby 2.2 和 2.3,例如:

$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.3 ruby2.3-dev

然后安装 Pry gem 和相关依赖项:

$ sudo gem install pry pry-nav pry-byebug

结果是:

$ sudo gem list pry

*** LOCAL GEMS ***

pry (0.10.3)
pry-byebug (3.3.0)
pry-nav (0.2.4)

还需要稍微打开文件访问权限:

$ sudo chmod -R 755 /var/lib/gems
$ sudo chmod    755 /usr/local/bin/pry
$ sudo chmod    755 /usr/local/bin/byebug

我以前让 Pry 使用 Ruby 1.9 和 2.1 在较旧的 RVM 钻机上工作,并且在那里工作得很好,但我显然已经“失去了安装 Pry 的公式”,或者有些东西发生了微妙的变化(?)。哦,没有 Rails 让事情变得复杂,只是简单的 Ruby 脚本。

当我运行看起来像这样的脚本代码时(并且与 RVM 钻机和私人安装的 gem 配合得很好):

require 'pry'
binding.pry

args = ARGV.join( ' ' )
# Check that only numbers 0..9, arithmetical operators +, -, * and /,
# decimal, comma, space and parentheses () are present in args:

当然,期望 Pry-Byebug 将在 binding.pry 方法调用之后的行处断点。而是显示以下断点 (?):

From: /var/lib/gems/2.2.0/gems/pry-nav-0.2.4/lib/pry-nav/tracer.rb @ line 21 PryNav::Tracer#run:

    12: def run(&block)
    13:   # For performance, disable any tracers while in the console.
    14:   # Unfortunately doesn't work in 1.9.2 because of
    15:   # http://redmine.ruby-lang.org/issues/3921. Works fine in 1.8.7 and 1.9.3.
    16:   stop unless RUBY_VERSION == '1.9.2'
    17: 
    18:   return_value = nil
    19:   command = catch(:breakout_nav) do      # Coordinates with PryNav::Commands
    20:     return_value = yield
 => 21:     {}    # Nothing thrown == no navigational command
    22:   end
    23: 
    24:   # Adjust tracer based on command
    25:   if process_command(command)
    26:     start
    27:   else
    28:     stop if RUBY_VERSION == '1.9.2'
    29:     if @pry_start_options[:pry_remote] && PryNav.current_remote_server
    30:       PryNav.current_remote_server.teardown
    31:     end
    32:   end
    33: 
    34:   return_value
    35: end

pry> 

那么,这里发生了什么?为什么 Pry 在 .../pry-nav/tracer.rb 的运行模块中的第 21 行中断?

必须如何安装 Pry 和 Byebug 才能生成一组可用的 Gem?

我保证会仔细记录这个答案,这样我以后就不会再丢失它了!TIA。

补充——发布这个问题后,我做了更多的挖掘,发现了这个:

https://plus.google.com/114275173749981855325/posts

这表明应该只安装 pry 和 pry-nav,而不是 pry-byebug。所以,我卸载了 pry-byebug 和 ta-da!撬调试再次开始正常工作。

我很抱歉问了这么长的问题,只是用这么简单的解决方案自己回答。希望你们都能让这篇文章继续存在,作为对未来“如何安装 Pry”的改进。现有的关于 pry 安装的“权威”文档是模棱两可和不准确的(或者可能只是没有解决这个潜在的问题)。

谢谢您,再次对给您带来的麻烦和困惑表示歉意。

4

1 回答 1

3

卸载pry-nav似乎使它再次正常工作:)

gem uninstall pry-nav
于 2017-03-01T21:16:55.833 回答