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)
Run Code Online (Sandbox Code Playgroud)
所以据我所知,它split不是在字符串上调用,而是在调用nil.这部分是解析Web服务器日志.但我无法理解为什么会这样nil.据我所知,它是空的.
正则表达式中的一些子模式失败了吗?所以这是网络服务器的错,有时会生成错误的日志字符串?
顺便问一下,如何在ruby中写入文件?我无法在Windows下的这个cmd窗口中正确阅读.
Chr*_*nch 19
你似乎在这里有几个问题,所以我会尝试一下似乎是主要问题:
如果你想看看某些东西是否为零,那么只需使用.nil?- 所以在你的例子中,你可以说request.nil?,true如果它是nil,那么它会返回false.
Ruby 2.3.0 添加了一个安全导航运算符( &.),用于nil在调用方法之前进行检查。
request&.split(' ')
Run Code Online (Sandbox Code Playgroud)
这在语义上或多或少等价于
!request.nil? && request.split(' ')
Run Code Online (Sandbox Code Playgroud)