我收到了Paperclip gem的错误。
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
答案 0 :(得分: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
我认为必须有一种方法以编程方式获取gem文件的路径,但我不知道该怎么做:(
答案 1 :(得分:0)
接受的答案有效;然而,它就像去宝石源并插入debugger
命令一样简单。
当rails提供您正在尝试的请求时,请注意是否已达到插入的debugger
命令。使用控制器,您可能不会立即进入控制器。有时在过滤器或辅助方法之前会快速控制并返回。以devise gem before_filter :authenticate_user!
为例。
如果您使用bundler,我们当前大多数人都这样做,从项目根目录发出的bundle show paperclip
命令将显示在哪里找到paperclip
gem的源代码。
此外,您需要在插入debugger
语句后重新启动服务器。