在pry-session

时间:2016-12-08 17:20:15

标签: ruby-on-rails ruby pry

为了加快开发过程,我正在使用文件zze.rb,我在IDE中编辑并使用短命令zze在pry控制台中重新加载(zz - uncommon开头的变量/方法名称;电子执行)。这样我可以通过binding.pry在我的应用程序的任何位置停止执行过程,并且可以多次执行代码,而不是每次等待完整的Rails环境重启。

我的.pryrc文件中包含此代码:

Pry.config.commands.command "zze", 'Execute all from .pry_exec/zze.rb' do
  Dir['.pry_exec/autoload/**/*.rb']
      .delete_if {|file| File.basename(file) =~ /^_/}  # inore files that starting form underscore '_'
      .each { |f| load(f) }

  file_name = File.absolute_path '.pry_exec/zze.rb'
  code = File.open(file_name, 'r') {|f| f.read}
  eval(code, @target, file_name)
end

并拥有文件夹<myproject>/.pry_exec/

<myproject>/.pry_exec/    # ignored from CVS
  autoload/               # this folder loads automatically each `zze` call in cosnole
    some_class1.rb
    some_code2.rb
  zze.rb                  # this file loads automatically each `zze` call in console.

有时可能会在binding.pry<myproject>/zze.rb 中使用<myproject>/autoload/some_class1.rb,但不起作用。它只是忽略了这一点。

我也尝试用这种方式重写zze - 代码:

# ~/.pryrc
def zze(name = nil)
  Dir['.pry_exec/autoload/**/*.rb']
      .delete_if {|file| File.basename(file) =~ /^_/}  # inore files that starting form underscore '_'
      .each { |f| load(f) }

  load ".pry_exec/#{name || 'zze'}.rb"
  # instance_eval(File.read(".pry_exec/#{name || 'zze'}.rb"))
end

但它也会忽略binding.pry<myproject>/zze.rb

中的<myproject>/autoload/some_class1.rb

zze不是pry-command而是方法时,来自zze.rb的代码在另一个范围内执行,我将无法访问我在zze.rb中定义的局部变量撬开主语。没有找到如何解决这个问题的方法。

0 个答案:

没有答案