2011-02-18 82 views
1

我得到这个错误,Paperclip宝石。如何调试宝石中的错误?

NoMethodError (You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.size): 
    paperclip (2.3.8) lib/paperclip/attachment.rb:104:in `assign' 

我该如何进行调试,看起来好像是在宝石中一样?如果这是我的代码,我会放几个puts看看发生了什么,但我不能这样做。我正在使用Rails 3.0.1

+1

问题可能是因为你通过零回形针。你是否检查过堆栈跟踪,你可以在这里发布? – 2011-02-18 13:38:49

回答

3

这是我的最佳拍摄。

  • 您的控制器打开一个和debugger行添加到它。我们需要调试器来踢设置断点
  • 下一页run rails --debug
  • 导航到具有断点
  • 调试器控制台会出现在页面/控制器。
  • 运行Gem.find_files("attachment.rb") < - 我会打电话给$ GEM_ROOT到这个返回
  • 运行list $GEM_ROOT/lib/paperclip/attachment.rb:104路径 - 这会显示周围发生错误的区域代码。
  • 运行b $GEM_ROOT/lib/paperclip/attachment.rb:$LINE - 将$ LINE替换为断点的合适候选者。
  • 运行cont
  • 命中导致错误的页面/操作,并且调试控制台应该在中断点打开。

我认为必须有一种方式来获得的路径以编程宝石文件,但我不知道该怎么做:(

0

接受的答案工作,但它就是这么简单将宝石源和插入debugger命令,你想打破。

要小心是否达到您的插入debugger命令时,导轨提供你正在尝试请求。与控制器,您可能无法进入控制器马上有时会出现滤波器或帮助器方法,使控制器快速返回并返回他以devise gembefore_filter :authenticate_user!为例。

如果使用捆绑,和我们大多数人目前做的,从你的项目的根目录下发bundle show paperclip命令将告诉你在哪里找到的paperclip宝石的源代码。

此外,您需要在插入debugger语句后重新启动服务器。