让我的Ruby文件加载到Pry?

Nic*_*Res 8 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!"
Run Code Online (Sandbox Code Playgroud)

在Pry,我做:

load "./AgencyListingScraper.rb"
Run Code Online (Sandbox Code Playgroud)

然后这是输出:

7] pry(main)> load './AgencyListingScraper.rb'
Finished!
=> true
[8] pry(main)> 
Run Code Online (Sandbox Code Playgroud)

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

[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)> 
Run Code Online (Sandbox Code Playgroud)

这就是我得到的.

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

感谢您的帮助!

JaT*_*aTo 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!"
Run Code Online (Sandbox Code Playgroud)

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

ruby AgencyListingScraper.rb 
Run Code Online (Sandbox Code Playgroud)

这应该会让你进入一个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"
Run Code Online (Sandbox Code Playgroud)

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


the*_*ist 5

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

但是我也在Reddit中找到了一个与这个要旨相关的答案,正是我所要的。

做一个

Pry.toplevel_binding.eval File.read("stuff.rb")
Run Code Online (Sandbox Code Playgroud)

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