让我的Ruby文件加载到Pry?

时间:2013-12-29 01:17:31

标签: ruby pry

我正在尝试使用Pry编辑我的Ruby文件。它中设置的变量很少,无论出于何种原因,我似乎无法cd进入它们,因为即使在我'加载'文件后它们也没有被定义。

以下是代码:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri.XML('<foo><bar /><foo>', nil, 'UTF-8') 

url = "http://superbook.eventmarketer.com/category/agencies/" 

puts "Finished!"

在Pry我做:

load "./AgencyListingScraper.rb"

然后这是输出:

7] pry(main)> load './AgencyListingScraper.rb'
Finished!
=> true
[8] pry(main)> 

然后当我尝试做类似的事情时:

[8] pry(main)> url
NameError: undefined local variable or method `url' for main:Object
from (pry):6:in `__pry__'
[9] pry(main)> cd url
Error: Bad object path: url. Failed trying to resolve: url. #<NameError: undefined local     
variable or method `url' for main:Object>
[10] pry(main)> 

这就是我得到的。

我认为我没有正确加载文件,虽然我已经搜索了几个小时但我无法弄清楚如何正确地执行此操作。几个月前,当我用Ruby制作刮刀时,我就是这么做的,但这次我因为这一点而难以入手。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:10)

以这种方式尝试:

在您的文件中包含Pry并执行binding.pry

require 'nokogiri'
require 'open-uri'
require 'pry'

doc = Nokogiri.XML('<foo><bar /><foo>', nil, 'UTF-8') 

url = "http://superbook.eventmarketer.com/category/agencies/" 

binding.pry
puts "Finished!"

然后执行以下命令运行该文件:

ruby AgencyListingScraper.rb 

那会让你进入一个Pry会话,在那里你可以使用像ls这样的命令来查看所有的变量。

你使用Pry的方式和这种方式都有效。但是,load在您的情况下可能不起作用的原因是局部变量不会跨文件转移,例如当您需要另一个文件时。

尝试加载此文件:

#test.rb
y = "i dont get carried over cause i am a local variable"
b= "i dont get carried over cause i am a local variable"
AAA= "i am a constant so i carry over"
@per = "i am an instance var so i get carried over as well"

使用load "test.rb"在Pry中加载时,您可以看到无法访问该文件中的本地变量。

答案 1 :(得分:2)

我找到了这个问题,但是提出的解决方案对我不起作用,因为我要加载的文件不是类也不是脚本,而是复杂的ruby config文件,因此我无法在代码中注入撬动。

但是我也在Reddit中找到了一个与this gist链接的答案,这正是我想要的。

Pry.toplevel_binding.eval File.read("stuff.rb")

将在当前的撬动会话中有效地执行文件stuff.rb的ruby代码,将结果对象留待检查。