def parse( line )
_, remote_addr, status, request, size, referrer, http_user_agent, http_x_forwarded_for = /^([^\s]+) - (\d+) \"(.+)\" (\d+) \"(.*)\" \"([^\"]*)\" \"(.*)\"/.match(line).to_a
print line
print request
if request && request != nil
_, referrer_host, referrer_url = /^http[s]?:\/\/([^\/]+)(\/.*)/.match(referrer).to_a if referrer
method, full_url, _ = request.split(' ')
in parse: private method 'split' called for nil:NilClass (NoMethodError)
所以我理解它不是在字符串上调用split
, 而是在nil
上进行调用。这部分是解析web服务器日志。但我不明白为什么会得到nil
。据我所知,它表示空值。
正则表达式中的一些子模式失败了吗?那么这就是Web服务器的问题,有时会生成错误的日志字符串?
顺便问一下,我如何在Ruby中写入文件?我无法在Windows的命令行窗口下正确读取。
null
,只有nil
。 - Mark Szymanskirequest
是 nil,就像你的错误提示一样,它不可能通过if request
的保护。 (顺便说一句:if request && request != nil
是多余的 - 如果请求存在,if request != nil
将始终为true
,这使得后者足够)。 - Amadan