Получение моего файла Ruby для загрузки в Pry?

Я пытаюсь отредактировать свой файл Ruby с помощью Pry. В нем установлено несколько переменных, и по какой-то причине я не могу 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, но на этот раз у меня возникли проблемы с началом работы из-за этого фрагмента.

Заранее спасибо за помощь!


person Nick Res    schedule 29.12.2013    source источник


Ответы (2)


Попробуйте так:

В вашем файле включите 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, чтобы увидеть все переменные.

И то, как вы использовали Прай, и это, работает. Однако причина, по которой 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"

Когда вы загружаете его в Pry с помощью load "test.rb", вы видите, что не можете получить доступ к локальным переменным из этого файла.

person JaTo    schedule 29.12.2013
comment
Спасибо! Это сработало. Я не делал этого раньше. Любая идея, почему мне, возможно, не нужно было делать это раньше? - person Nick Res; 29.12.2013
comment
оба способа работают, однако, binding.pry является моим предпочтительным способом, так как вы все еще можете получить доступ к своим локальным переменным. см. правки для получения дополнительной информации! Рад помочь - person JaTo; 29.12.2013
comment
Ааа, я вижу это по поводу локальных переменных и переменных экземпляра. Большое спасибо за Вашу помощь. Я бы скоро начал волноваться без этих дополнительных знаний. - person Nick Res; 29.12.2013
comment
Можно ли после каких-то действий загружать файлы в pry? Хотите загрузить несколько файлов во время ручного тестирования... - person Tiw; 20.06.2018

Я нашел этот вопрос в Google, но предложенное решение не сработало для меня, потому что файл, который я хотел загрузить, был не классом и не скриптом, а сложным файлом конфигурации ruby, поэтому я не смог внедрить pry в код.

Но я также нашел ответ в Reddit, связанный с этой сутью, и это было именно то, что я искал.

делать

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

Будет эффективно выполнять ruby-код файла stuff.rb в текущем сеансе pry, оставляя полученные объекты для проверки.

person theist    schedule 03.10.2018