2016-08-17 102 views
0

卡住这一个,这个布局是为了厨师inspec测试,但利用红宝石来抓取文件的内容。然而,随着本次测试我没有实际测试对文件,所以我想了解如何解释的是,继承人的代码:未定义的方法'扫描'为零:NilClass(NoMethodError)

%w(/etc/bashrc /etc/profile).each do |path| 
file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 
BASELINE = '0027' 
(1..3).each do |i| # leading char is '0' octal indicator 
    describe umask[i].to_i do 
     it { should be <= BASELINE[i].to_i } 
    end 
    end 
    end 
    end 
end 

这里是行给我找麻烦

file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 

回答

0

至于误差而言,即“未定义的方法‘扫描’的零:NilClass”,这个错误只会拿出,一边做INSPEC来看,如果文件,这些文件传递,在文件系统上不存在或不可读。

此外,提供的信息不完整,因为不清楚两个文件中设置的umask是什么,即它是3位还是4位?

因为同时做扫描您正在寻找3位的umask “扫描(/^\ S的umask \ S +(\ d {3})\ B /)*”,并已将“基线='0027'“这是4位数字。所以,这肯定会有问题。

如果你有 “的umask 027” 的文件,那么,它应该是: 检查基线= '027',寻找3位

%w(/etc/bashrc /etc/profile).each do |path| 
    file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 
    BASELINE = '027' 
    (1..3).each do |i| # leading char is '0' octal indicator 
     describe umask[i].to_i do 
     it { should be <= BASELINE[i].to_i } 
     end 
    end 
end 
end 

否则你的umask“ 的umask 0027“的文件,那么,它应该是:

检查扫描(/^\ s * umask \ s +(\ d {4})\ b /),搜索4位数字umask

%w(/etc/bashrc /etc/profile).each do |path| 
    file(path).content.scan(/^\s*umask\s+(\d{4})\b/).flatten.each do |umask| 
    BASELINE = '027' 
    (1..3).each do |i| # leading char is '0' octal indicator 
     describe umask[i].to_i do 
     it { should be <= BASELINE[i].to_i } 
     end 
    end 
end 
end 
0

您可以将file(path).content更改为与任何文件内容匹配的字符串。

"Sample_string".scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 

原因是file(path).content回报nil如果你没有对实际文件测试。并且nil没有scan方法,这就是您遇到错误的原因。

相关问题