我在扫描方法时收到User:Class的未定义方法扫描 (第13行:last = resp.headers ['Link'] .scan(/ \ d + /)。last) 由Rails用户模型调用(内部类方法self.create_user(auth)):
class User
include Mongoid::Document
field :email
field :nickname
embeds_many :posts
def self.create_user(auth)
conn = FaradayStack.build 'https://api.example.com'
resp = conn.get "/users/#{auth.nickname}/list"
last = resp.headers['Link'].scan(/\d+/).last # <== error occurs here
n = 0
create! do |user|
user.email = auth["user_info"]["email"]
user.nickname = auth['user_info']['nickname']
while n <= last.to_i do
resp = conn.get "/users/#{auth.nickname}/list?page=#{n=n+1}"
resp.body.each do |repo|
user.posts.build( html_url: "#{repo['html_url']}",
description: "#{repo['description']}",
created_at: "#{repo['created_at']}",
pushed_at: "#{repo['pushed_at']}",
avatar_url: "#{repo['owner']['avatar_url']}" )
end
end
end
end
end
如果我通过Rails控制台调用相同的代码,它可以正常工作:
ruby-1.9.2-p136 :158 > last = resp.headers['Link'].scan(/\d+/).last
=> "16"
ruby-1.9.2-p136 :159 > last = resp.headers['Link'].scan(/\d+/).last.to_i
=> 16
ruby-1.9.2-p136 :160 >
我想,与istance和类方法概念有关的东西, 但我无法解决它。
更新:
关于jimworm的建议,我把rails logger而不是“冒犯”行:
Rails.logger.info "\r\n" + "#{Time.now} " + "resp.headers['Link']: #{resp.headers['Link']}" + "\r\n"
我得到的是:
2011-09-30 16:40:03 +0200 resp.headers['Link']:
Redirected to http://localhost:3001/
Completed 302 Found in 3151ms
MONGODB blumb_dev['users'].find({:_id=>BSON::ObjectId('4e85d4c41d41c8103f000006')})
在Rails控制台中它是:
ruby-1.9.2-p136 :181 > resp.headers['Link']
=> "<https://api.example.com/users/lgs/list?page=18>; rel=\"next\", <https://api.example.com/users/lgs/list?page=51>; rel=\"last\""
ruby-1.9.2-p136 :182 >
有什么想法吗?
答案 0 :(得分:3)
我们的英雄很困惑......它在控制台中运行,当然它可以在控制器上运行吗?如果没有抓到虫子,村庄将注定失败。他决定拍摄这个小虫的快照,并在行动中抓住它。
Rails.logger.info...
设置了陷阱,然后他等了。屏幕闪烁。一击!这个bug在我们的陷阱中留下了痕迹。我们的英雄看起来......
令他惊讶的是,陷阱是空的!2011-09-30 16:40:03 +0200 resp.headers['Link']: #nothing here#
“现在怎么可能”他想知道,“一个没有留下任何痕迹的错误?什么样的虫子没有痕迹?”
然后它来找他。 “尤里卡,nil
!”他胜利地敲了敲桌子,“nil
在原木中没有出现任何东西!这就是为什么我不能scan
它!”
揭示了这个虫子的身份,不久之后我们的英雄将其追溯到api.example.com
的家中并一劳永逸地捣碎它。事实证明,这是村庄发送给api.example.com
的消息,这些消息诱使这个小虫隐藏起来。现在,随着虫子的消失,村庄得到了拯救,所有人都幸福地生活在这里。