Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:调试rake任务_Ruby On Rails_Ruby_Debugging_Rake_Ruby Debug - Fatal编程技术网

Ruby on rails RubyonRails:调试rake任务

Ruby on rails RubyonRails:调试rake任务,ruby-on-rails,ruby,debugging,rake,ruby-debug,Ruby On Rails,Ruby,Debugging,Rake,Ruby Debug,当我编写调试器时,它不会启动: NoMethodError: undefined method `run_init_script' for Debugger:Module from /usr/local/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.3/lib/ruby-debug-base.rb:239:in `debugger' from (irb):4 若我运行rake my:task--debugger,它会立即将我返回控制台。如何调试rake

当我编写
调试器时,它不会启动:

NoMethodError: undefined method `run_init_script' for Debugger:Module
from /usr/local/lib/ruby/gems/1.8/gems/ruby-debug-base-0.10.3/lib/ruby-debug-base.rb:239:in `debugger'
from (irb):4
若我运行
rake my:task--debugger
,它会立即将我返回控制台。如何调试rake任务?

我找到了解决方案

$ gem install ruby-debug
$ ruby-debug rake my:task
或者在某些系统上

$ rdebug rake my:task

这种方法对我不起作用。我刚刚在代码中添加了以下内容:

require 'ruby-debug'
# ... code ...
debugger

Andrey Kouznetsov的答案在我使用Ruby 1.9.3时并不适用。ruby调试gem似乎不支持ruby 1.9。我必须使用调试器gem:

  • gem'debugger'
    添加到我的Gemfile的开发组
  • 运行
    bundle
  • require'debugger'
    添加到我的rake任务的顶部
  • 添加对
    debugger
    的调用,我希望在我的rake任务中有一个断点
  • 从命令行正常运行rake任务,例如:
    rake my:task
  • 我强烈推荐这个

    bundle install pry
    require 'pry'
    rake ...
    
    在您的rake任务文件中:

    binding.pry 
    

    ByeBug是2.0版的另一款+

    内置了相当好的调试器。如果有人在搜索如何使其与rake一起工作时发现了这个问题,下面是一个有效的配置:

    {
        "name": "Debug a rake task",
        "type": "Ruby",
        "request": "launch",
        "useBundler": true,
        "cwd": "${workspaceRoot}",
        "program": "/usr/local/bin/rake",
        "args": ["all"]
    }
    

    这将运行rake任务
    all
    。您可能必须将路径更改为rake,我没有找到运行路径中的路径的方法。

    确实,尽管您不应该在rake任务中执行大量逻辑。我的大多数rake任务都是一行程序,在模型上调用一个方法,然后对模型进行全面测试。我正在基于mechanize进行spider,我需要调试一些行。所有这些都在方法中,尚未被测试覆盖。谢谢您的回复。@rspeicher,如果您在我的系统上有一个种子任务是
    rdebug
    而不是
    ruby debug
    的话,它会很有用。提示:在开始时添加
    调试器。设置[:autoeval]=true
    这将导致典型的rails行为,您键入的所有内容都运行在
    self
    中,您将
    调试器
    调用放在那里。另一个选项不是将
    require'debugger'
    放在顶部,而是将内联
    require'debugger';调试器
    。这样,当您删除
    调试器
    语句时,您不会忘记删除
    require
    所有的
    都对我不起作用。我使用了
    rvm
    s
    rake
    ,我在任务的第一行设置了
    args
    ,它对我起了作用。@SomeGuyOnAComputer:因此出现了“这将运行rake任务”。这只是我两年前(或两年前)完成的一项任务的名称。很遗憾,我错过了这项任务。如果您想从Rubymine调试,请检查此项。